Xi Xu's More Things

wcstoul, wcstoull

来自cppreference.com
< c‎ | string‎ | wide
 
 
 
空终止宽字符串
函数
字符操作
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C99)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
转换成数值格式
(C95)(C99)
wcstoulwcstoull
(C95)(C99)
(C99)(C95)(C99)
(C99)(C99)
字符串操作
(C95)(C11)
(C95)(C11)
(C95)(C11)
(C95)(C11)
(C95)(C11)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)(C11)
数组操作
(C95)(C11)
(C95)(C11)
(C95)
(C95)
(C95)
 
在标头 <wchar.h> 定义
unsigned long      wcstoul( const wchar_t* str, wchar_t** str_end, int base );
(C95 起)
(C99 前)
unsigned long      wcstoul( const wchar_t * restrict str,
                            wchar_t ** restrict str_end, int base );
(C99 起)
unsigned long long wcstoull( const wchar_t * restrict str,
                             wchar_t ** restrict str_end, int base );
(C99 起)

转译 str 所指向的宽字符串中的无符号整数值。

舍弃所有空白符(以调用 isspace() 鉴别),直到找到首个非空白符,然后取尽可能多的字符组成底 n (其中 n=base)的无符号整数表示,并将它们转换成一个整数值。合法的无符号整数值由下列部分组成:

  • (可选)正或负号
  • (可选)指示八进制底的前缀(0)(仅当底为 80 时应用)
  • (可选)指示十六进制底的前缀(0x0X)(仅当底为 160 时应用)
  • 一个数字序列

底的合法集是 {0,2,3,...,36} 。合法数字集对于底 2 整数是 {0,1},对于底3整数是 {0,1,2} ,以此类推。对于大于 10 的底,合法数字包含字母字符,从对于底 11 整数的 Aa 到对于底36整数的 Zz 。忽略字符大小写。

当前安装的 C 本地环境可能接受另外的数字格式。

如果 base 是 0,那么自动检测数值进制:如果前缀是 0,那么底是八进制,如果前缀是 0x0X,那么底是十六进制,否则底是十进制。

如果符号是输入序列的一部分,那么对从数字序列计算得来的数字值取反,如同用结果类型的一元减,它对无符号整数应用回卷规则。

函数设置 str_end 所指向的指针指向最后被转译字符的后一宽字符。若 str_end 为空指针,则忽略它。

参数

str - 指向要转译的空终止宽字符串的指针
str_end - 指向指向宽字符的指针的指针
base - 被转译整数值的

返回值

成功时为对应 str 内容的整数值。若转换后的值落在对应返回类型的范围外,则出现值域错误并返回 ULONG_MAXULLONG_MAX 。若不能进行转换,则返回 0

示例

#include <stdio.h>
#include <errno.h>
#include <wchar.h>
 
int main(void)
{
    const wchar_t *p = L"10 200000000000000000000000000000 30 40";
    printf("Parsing L'%ls':\n", p);
    wchar_t *end;
    for (unsigned long i = wcstoul(p, &end, 10);
         p != end;
         i = wcstoul(p, &end, 10))
    {
        printf("'%.*ls' -> ", (int)(end-p), p);
        p = end;
        if (errno == ERANGE){
            printf("range error, got ");
            errno = 0;
        }
        printf("%lu\n", i);
    }
}

输出:

Parsing '10 200000000000000000000000000000 30 40':
'10' -> 10
' 200000000000000000000000000000' -> range error, got 18446744073709551615
' 30' -> 30
' 40' -> 40

引用

  • C11 标准(ISO/IEC 9899:2011):
  • 7.29.4.1.2 The wcstol, wcstoll, wcstoul, and wcstoull functions (第 429-430 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.24.4.1.2 The wcstol, wcstoll, wcstoul, and wcstoull functions (第 375-376 页)

参阅

将字节字符串转换成无符号整数值
(函数)
(C95)(C99)
将宽字符串转换成整数值
(函数)