#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
开头的八进制数、0x
或 0X
开头的十六进制数。
参数
start
- 要转换的宽字符串end
- 返回成功转换的子串后下一个字符的地址base
- 进制基数,最大支持 36 进制,设为 0 时自动检测基数
例如:
返回值
- 返回转换为
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