2561

13 分钟

#C 语言标准库函数 wcstoimax

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

说明

将宽字符串转换为 intmax_t 类型的整数。

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

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

参数

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

例如:

宽字符串

2

3

3

(空格)

(空格)

6

6

6

start

end

返回值

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

#示例

#include <stdio.h> #include <inttypes.h> #include <wchar.h> int main(void) { const wchar_t* text = L"-233 666 888 010 0x10"; // 包含多个数值的宽字符串 const wchar_t* start = text; // 开头 wchar_t* end = NULL; // 结尾 while (1) { intmax_t num = wcstoimax(start, &end, 0); // 进行转换,自动检测进制基数 if (start == end) break; printf("%" PRIiMAX "\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