strtoul
strtoul, strtoull
在头文件 | | |
---|---|---|
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)无符号整数表示并将它们转换为整数值。有效的无符号整数值由以下部分组成:
- (可选)加号或减号
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):
扩展内容
wcstoulwcstoull(C95)(C99) | 将宽字符串转换为无符号整数值(函数) |
---|---|
atoiatolatoll(C99) | 将字节字符串转换为整数值(函数) |
strtolstrtoll(C99) | 将字节字符串转换为整数值(函数) |
| strtoul的C ++文档 |