wcstol 或 wcstol 子例程
用途
将宽字符字符串转换为长整数表示法。
库
标准 C 库 (libc.a)
语法
描述
沃茨托尔 子例程将宽字符字符串转换为长整数表示法。 沃茨托勒 子例程将宽字符字符串转换为长整型整数表示法。
- 空格宽字符代码的初始 (可能为空) 序列 (如 伊斯沃空间 子例程所指定)
- 被解释为整数并在由 基本 参数确定的基数中表示的主题序列
- 包含一个或多个未识别的宽字符代码的最终宽字符字符串,包括输入宽字符字符串的终止宽字符空值
如果可能,那么会将主体集转换为整数,并返回结果。
基本 参数可以采用下列值: 0 到 9 ,或者 a (或 A) 到 z (或 Z)。 基础值可能有 36 个值。 如果基值为 0 ,那么主题字符串的期望格式为十进制,八进制或十六进制常量,其中任何值前面都可以加上 + (加号) 或-(减号)。 十进制常量以非零数字开头,并由一系列十进制数字组成。 八进制常量由前缀 0 组成 (可选地 0 数字 0 到 7 的序列)。 十六进制常量定义为前缀 0x (或 0X) ,后跟十进制数字和字母 a (或 A) 到 f (或 F) 的序列,值范围从 10 (对于 a 或 A) 到 15 (对于 f 或 F)。
如果基值在 2 到 36 之间,那么主题序列的期望形式是一个字母和数字序列,表示 基本 参数指定的基数中的整数,可选地以 + 或-作为前缀,但不包括整数后缀。 字母 a (或 A) 到 z (或 Z) 被指定为 10 到 35 的值。 只允许使用值小于基本值的字母。 如果 base 值为 16 ,那么字符 0x 或 0X 可以选择性地位于符号后面的字母或数字的序列前 (如果存在)。
对宽字符字符串进行解析以跳过初始空间字符 (由 伊斯沃空间 子例程确定)。 任何非空格字符表示主体集字符串的开头,该字符串可能在 基本 参数指定的基数中形成整数。 主题序列定义为最长的初始子串,该子串是期望格式的长整数。 任何不符合此格式的字符从调用 沃茨托尔 或 沃茨托勒 子例程返回到 恩德普特尔 参数所指向的宽字符字符串的最后部分开始。
参数
| 项 | 描述 |
|---|---|
| Nptr | 包含一个指针,该指针指向要转换为长整数的宽字符字符串。 |
| 恩德普特尔 | 包含一个指针,该指针指向 Nptr 参数字符串中的位置,在该位置找到的宽字符不是有效字符。 |
| 基本 | 指定在其中解释字符的基数。 |
返回值
如果找到期望的格式,那么 沃茨托尔 和 沃茨托勒 子例程将返回长整型或长整型整数的转换值。 如果无法执行任何转换,那么 0 返回值 0。 如果转换后的值在可表示值的范围之外,那么对于 沃茨托尔 子例程会返回 最大 LONG_MAX 或 LONG_MIN ,而对于 沃茨托勒 子例程会返回 LONG_MAX 或 LONG_MIN (根据值的符号)。 错误号 的值将设置为 ERANGE。 如果不支持由 基本 参数指定的基本值,那么将返回 EINVAL 。
如果主题序列具有期望的形式,那么会将其解释为相应基数中的整数常量。 如果 恩德普特尔 参数不是空指针,那么指向最终字符串的指针将存储在该参数中。
如果主题序列为空或没有有效的表单,那么不会执行转换。 如果 Nptr 参数的值不是空指针,那么该参数将存储在 恩德普特尔 参数中。
因为 0 , LONG_MIN和 最大 LONG_MAX (对于 沃茨托尔) 和 LONG_MIN,以及 LONG_MAX (对于 沃茨托勒) 在发生错误时返回,并且如果 沃茨托尔 或 沃茨托勒 子例程成功,那么应用程序应该在调用任一子例程之前将 错误号 全局变量 0 为 0 ,并在返回后检查 错误号 。 如果 错误号 全局值已更改,那么将发生错误。
示例
要将宽字符字符串转换为带符号的长整数,请使用以下代码:
#include <stdlib.h>
#include <locale.h>
#include <errno.h> main()
{
wchar_t *WCString, *endptr;
long int retval;
(void)setlocale(LC_ALL, "");
/**Set errno to 0 so a failure for wcstol can be
**detected */
errno=0;
/*
**Let WCString point to a wide character null terminated
** string containing a signed long integer value
**
*/retval = wcstol ( WCString &endptr, 0 );
/* Check errno, if it is non-zero, wcstol failed */
if (errno != 0) {
/*Error handling*/
}
else if (&WCString == endptr) {
/* No conversion could be performed */
/* Handle this case accordingly. */
}
/* retval contains long integer */
}