2539

13 分钟

#C 语言标准库函数 strtoull

/********************************************* * @brief 将字符串转换为 unsigned long long 类型的浮点数 * @param start 要转换的字符串 * @param[out] end 返回成功转换的子串后下一个字符的地址 * @param base 进制基数 * @return 转换为 unsigned long long 类型后的值 ********************************************/ unsigned long long strtoull(const char* restrict start, char** restrict end, int base);

说明

将字符串转换为 unsigned long long 类型的整数。

此函数会丢弃字符串开头的所有空格字符(由 isspace 函数判断),并提取尽可能多的字符来构成有效的浮点数。

支持正负号、十进制数、0 开头的八进制数、0x0X 开头的十六进制数。

参数

  • start - 要转换的字符串
  • end - 返回成功转换的子串后下一个字符的地址
  • base - 进制基数,最大支持 36 进制,设为 0 时自动检测基数

例如:

字符串

2

3

3

(空格)

(空格)

6

6

6

start

end

返回值

  • 返回转换为 unsigned long long 类型后的值
  • 失败时返回 0

#示例

#include <stdio.h> #include <stdlib.h> int main(void) { const char* text = "233 666 888 010 0x10"; // 包含多个数值的字符串 const char* start = text; // 开头 char* end = NULL; // 结尾 while (1) { unsigned long long num = strtoull(start, &end, 0); // 进行转换,自动检测进制基数 if (start == end) break; printf("%llu\n", num); // 打印 start = end; // 指向下一个数值 } return 0; }

说明:

调用轮次调用前 start 指向调用后 end 指向
1"233 666 888 010 0x10"" 666 888 010 0x10"
2" 666 888 010 0x10"" 888 010 0x10"
3" 888 010 0x10"" 010 0x10"
4" 010 0x10"" 0x10"
5" 0x10"""
6""""

运行结果:

233 666 888 8 16

#推荐阅读

创建于 2025/7/29

更新于 2025/8/1