strtoul
在头文件<stdlib.h>中定义 | | |
---|---|---|
unsigned long strtoul(const char * str,char ** str_end,int base); | | (直到C99) |
unsigned long strtoul(const char * restrict str,char ** restrict str_end,int base); | | (自C99以来) |
unsigned long long strtoull(const char * restrict str,char ** restrict str_end,int base); | | (自C99以来) |
解释str指向的字节字符串中的无符号整数值。
放弃任何空白字符(通过调用标识isspace()
),直到找到第一个非空白字符,然后接收尽可能多的字符以形成有效的base-n(其中n = base)无符号整数表示并将它们转换为整数值。有效的无符号整数值由以下部分组成:
- (可选)加号或减号
- (可选)prefix(
0
)指示八进制基数(只适用于基数为8
或0
) - (可选)前缀(
0x
或0X
)表示十六进制基数(仅适用于基数为16
或0
) - 数字序列
base的有效值集合是{0,2,3,...,36}。base-2整数的有效数字集合是{0,1
},对于base-3整数是{0,1,2
},依此类推。对于大于等于的基数10
,有效数字包含字母字符,从Aa
基数为11的整数开始,到Zz
基数为36的整数。字符的情况被忽略。
其他数字格式可以被当前安装的C语言环境接受。
如果基数的值是0
,数字基地是自动检测:如果前缀是0
,基地是八进制的,如果前缀是0x
或0X
,基地是十六进制,否则基数是十进制。
如果减号是输入序列的一部分,则根据数字序列计算的数值将被否定,如同使用无符号整数环绕规则的结果类型中的一元减号一样。
这些函数将str_end指向的指针设置为指向经过最后解释的字符的字符。 如果str_end是NULL,它将被忽略。
参数
str | - | 指向要解释的以空字符结尾的字节字符串 |
---|---|---|
str_end | - | 指向字符的指针。 |
base | - | 解释的整数值的基数 |
返回值
整数值对应str成功的内容。 如果转换后的值超出了相应返回类型的范围,则会发生范围错误(errno设置为ERANGE),并返回ULONG_MAX或ULLONG_MAX。 如果不能执行转换,则返回0。
例
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
int main(void)
{
const char *p = "10 200000000000000000000000000000 30 -40";
printf("Parsing '%s':\n", p);
char *end;
for (unsigned long i = strtoul(p, &end, 10);
p != end;
i = strtoul(p, &end, 10))
{
printf("'%.*s' -> ", (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' -> 18446744073709551576
参考
- C11标准(ISO / IEC 9899:2011):
- 7.22.1.4阶段,阶段,阶段和阶段功能(p:344-345)
- C99标准(ISO / IEC 9899:1999):
- 7.20.1.4阶段,阶段,阶段和阶段功能(P:310-311)
- C89 / C90标准(ISO / IEC 9899:1990):
- 4.10.1.6 strtoul函数
扩展内容
wcstoulwcstoull(C95)(C99) | 将宽字符串转换为无符号整数值(函数) |
---|---|
atoiatolatoll(C99) | 将字节字符串转换为整数值(函数) |
strtolstrtoll(C99) | 将字节字符串转换为整数值(函数) |
| strtoul的C ++文档 |
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com