跳转到内容

strtoul : 字符串转无符号长整型

#include <stdlib.h>
unsigned long strtoul(const char *s, char **ptr, int base);
unsigned long _strtoul_r(void *reent, const char *s, char **ptr, int base);
```### 描述
函数 strtoul 将字符串 *s 转换为无符号长整型。首先,它将字符串分解为三部分:前导空白字符(被忽略);由在 base 指定的基数中有意义的数字组成的主题字符串(例如,如果 base 的值为 8,则为 0 到 7);以及由一个或多个无法解析的字符组成的尾部部分,该部分始终包含终止空字符。然后,它尝试将主题字符串转换为无符号长整型,并返回结果。
如果 base 的值为零,则期望主题字符串看起来像一个普通的 C 整数常量(只是不允许有可选的正负号):一个可能的表示十六进制基数的 0x,以及一个数字。如果 base 在 2 到 36 之间,则主题的预期形式是一个数字序列(根据基数可能包含字母),表示以 base 指定的基数的整数。字母 a--z(或 A--Z)被用作值从 10 到 35 的数字。如果 base 为 16,则允许有前导 0x。
主题序列是输入字符串中从第一个非空白字符开始,具有预期形式的最长初始序列。如果字符串为空或完全由空白字符组成,或者如果第一个非空白字符不是允许的数字,则主题字符串为空。
如果主题字符串是可接受的,并且 base 的值为零,strtoul 会尝试从输入字符串中确定基数。带有前导 0x 的字符串被视为十六进制值;带有前导 0 且没有 x 的字符串被视为八进制;所有其他字符串被视为十进制。如果 base 在 2 到 36 之间,则它将用作转换基数,如上所述。最后,指向转换后的主题字符串之后第一个字符的指针会存储在 ptr 中(如果 ptr 不是 NULL)。
如果主题字符串为空(即,如果 *s 不是以可接受形式的子字符串开头),则不执行转换,并且 s 的值会存储在 ptr 中(如果 ptr 不是 NULL)。
替代函数 _strtoul_r 是一个可重入版本。额外的参数 reent 是一个指向可重入结构的指针。### 返回值
strtoul 返回转换后的值(如果有)。如果未进行转换,则返回 0。
如果转换后的值的幅度过大,strtoul 将返回 ULONG_MAX,并将 errno 设置为 ERANGE。
---
**权威来源**: BUSMASTER DITA help source `strtoul.dita`, compiled into `BUSMASTER.CHM` with the application.