STRTOUL - Linux手册页

时间:2019-08-20 18:01:27  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2020-06-09

名称

strtoul,strtoull,strtouq-将字符串转换为无符号长整数

语法

#include <stdlib.h>

unsigned long int strtoul(const char *nptr, char **endptr, int base);

unsigned long long int strtoull(const char *nptr, char **endptr,
                                int base);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

strtoull():

_ISOC99_SOURCE || || / * Glibc版本

说明

strtoul()函数根据给定的基数将nptr中字符串的初始部分转换为无符号的long int值,该值必须介于2到36之间(包括2和36),或者是特殊值0。

该字符串可以以任意数量的空格(由isspace(3)确定)开头,后跟一个可选的aq + aq或aq-aq符号。如果base为零或16,则字符串可以包含一个" 0x"前缀,并且该数字将以16为基数;否则,该字符串将以16为基数。否则,除非下一个字符是aq0aq,否则零基将被视为10(十进制),在这种情况下,它将被视为8(八进制)。

字符串的其余部分以明显的方式转换为无符号long int值,停在给定基数中不是有效数字的第一个字符处。 (在大于10的基数中,大写或小写字母aqAaq代表10,aqBaq代表11,依此类推,aqZaq代表35。)

如果endptr不为NULL,则strtoul()将第一个无效字符的地址存储在* endptr中。如果根本没有数字,则strtoul()将nptr的原始值存储在* endptr中(并返回0)。特别是,如果返回时* nptr不是aq \ 0aq,而** endptr是aq \ 0aq,则整个字符串都是有效的。

strtoull()函数的工作原理与strtoul()函数相同,但返回的是无符号long long int值。

返回值

strtoul()函数返回转换结果,或者如果存在前导减号,则返回转换结果的取反,表示为无符号值,除非原始(取整)值溢出。在后一种情况下,strtoul()返回ULONG_MAX并将errno设置为ERANGE。对于strtoull()完全相同(用ULLONG_MAX代替ULONG_MAX)。

错误说明

EINVAL
(不适用于C99)给定的基数包含不受支持的值。
ERANGE
所得值超出范围。

如果未执行转换(未看到数字,则返回0),该实现还可以将errno设置为EINVAL。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
strtoul(),strtoull(),strtouq()Thread safetyMT-Safe locale

遵循规范

strtoul():POSIX.1-2001,POSIX.1-2008,C89,C99 SVr4。

strtoull():POSIX.1-2001,POSIX.1-2008,C99。

备注

由于strtoul()在成功和失败时都可以合法地返回0或ULONG_MAX(对于strtoull()为ULLONG_MAX),因此调用程序应在调用之前将errno设置为0,然后通过检查errno是否为非零值来确定是否发生了错误。通话后。

在" C"语言环境以外的语言环境中,可以接受其他字符串。 (例如,可能支持当前语言环境的千位分隔符。)

BSD也有

u_quad_t strtouq(const char *nptr, char **endptr, int base);

具有完全相似的定义。根据当前体系结构的大小,这可能等效于strtoull()或strtoul()。

负值被认为是有效输入,并且将被静默转换为等效的无符号long int值。

示例

请参见strtol(3)手册页上的示例;本手册页中描述的功能的用法类似。

另外参见

a64l(3),atof(3),atoi(3),atol(3),strtod(3),strtol(3),strtoumax(3)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/