wcstol ()-wcstoll ()- 将宽字符串转换为长整型和长整型整数

格式 (wcstol())

#include <wchar.h>
long int wcstol(const wchar_t *nptr, wchar_t **endptr, int base);

格式 (wcstoll())

#include <wchar.h>
long long int wcstoll(const wchar_t *nptr, wchar_t **endptr, int base);

语言级别

ANSI

线程安全

语言环境敏感

如果在编译命令中指定了 LOCALETYPE (*LOCALE) ,那么这些函数的行为可能会受到当前语言环境的 LC_CTYPE 类别的影响。 如果在编译命令上指定了 LOCALETYPE (*LOCALEUCS2) 或 LOCALETYPE (*LOCALEUTF) ,那么这些函数的行为也可能受当前语言环境的 LC_UNI_CTYPE 类别影响。 当在编译命令上指定 LOCALETYPE (*CLD) 时,这些函数不可用。 有关更多信息,请参阅 了解 CCSID 和语言环境

宽字符函数

有关更多信息,请参阅 宽字符

描述

wcstol() 函数将 nptr 指向的宽字符字符串的初始部分转换为长整数值。 nptr 参数指向可以解释为 long int 类型的数字值的宽字符序列。 wcstol() 函数在无法识别为数字一部分的第一个宽字符处停止读取字符串。 此字符可以是字符串末尾的 wchar_t 空字符。 结束字符也可以是大于或等于基本字符的第一个数字字符。

wcstoll() 函数将宽字符字符串转换为长整型整数。 解析宽字符字符串以跳过初始空格字符 (由 iswspace 函数确定)。 任何非空格字符都表示在 base 参数指定的基数中可能形成长整型整数的主题字符串的开头。 主题序列定义为作为期望形式的长整型的最长初始子串。

如果 endptr 参数的值不为空,那么结束扫描的字符的指针将存储在 endptr中。 如果不能形成长整型整数,那么 endptr 参数的值将设置为 nptr 参数的值。

如果 base 参数是介于 236之间的值,那么主体序列的期望格式是表示长整数的字母和数字序列,其基数由 base 参数指定。 此序列 (可选) 前面有一个正 (+) 或负 (-) 符号。 从 a (或 A) 到 z (或 Z) (含) 的字母将值 10 归为 35; 仅允许其归因值小于 base 参数的字母。 如果 base 参数的值为 16,那么字符 0x0X (可选) 在字母和数字序列之前,后跟正 (+) 或负 (-) 符号 (如果存在)。

如果 base 参数的值为 0,那么字符串将确定基数。 因此,在可选前导符号之后,前导 0 指示八进制转换,前导 0x0X 指示十六进制转换。

返回值

wcstol() 函数返回转换后的长整数值。 如果无法执行任何转换,那么 wcstol() 函数将返回 0。 如果正确的值超出可表示值的范围,那么 wcstol() 函数将返回 LONG_MAX 或 LONG_MIN (根据值的符号) ,并将 errno 设置为 ERANGE。 如果字符串 nptr 指向的字符串为空或没有期望的格式,那么不会执行任何转换,并且 nptr 的值存储在 endptr指向的对象中,前提是 endptr 不是空指针。

成功完成后, wcstoll() 函数将返回转换后的值。 如果无法执行转换,那么将返回 0 ,并且会设置 errno 全局变量以指示错误。 如果正确的值超出可表示值的范围,那么 wcstoll() 函数将返回值 LONG_LONG_MAX 或 LONG_LONG_LONG_MIN。

errno 的值可以设置为 ERANGE (范围错误) 或 EINVAL (无效参数)。

示例

此示例使用 wcstol() 函数将宽字符字符串 wcs 转换为长整数值。
#include <stdio.h>
#include <wchar.h>
 
int main(void)
{
   wchar_t *wcs = L"10110134932";
   wchar_t *stopwcs;
   long     l;
   int      base;
 
   printf("wcs = \"%ls\"\n", wcs);
   for (base=2; base<=8; base*=2) {
      l = wcstol(wcs, &stopwcs, base);
      printf("   wcstol = %ld\n"
             "   Stopped scan at \"%ls\"\n\n", l, stopwcs);
   }
   return 0;
 
   /*******************************************************
      The output should be similar to:
 
      wcs = "10110134932"
         wcstol = 45
         Stopped scan at "34932"
 
         wcstol = 4423
         Stopped scan at "4932"
 
         wcstol = 2134108
         Stopped scan at "932"
   *******************************************************/
}

相关信息