Xi Xu's More Things

wcstoimax, wcstoumax

来自cppreference.com
< c‎ | string‎ | wide
 
 
 
空终止宽字符串
函数
字符操作
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C99)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
转换成数值格式
(C95)(C99)
(C95)(C99)
(C99)(C95)(C99)
wcstoimaxwcstoumax
(C99)(C99)
字符串操作
(C95)(C11)
(C95)(C11)
(C95)(C11)
(C95)(C11)
(C95)(C11)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)
(C95)(C11)
数组操作
(C95)(C11)
(C95)(C11)
(C95)
(C95)
(C95)
 
在标头 <inttypes.h> 定义
intmax_t wcstoimax( const wchar_t *restrict nptr,
                    wchar_t **restrict endptr, int base );
(C99 起)
uintmax_t wcstoumax( const wchar_t *restrict nptr,
                     wchar_t **restrict endptr, int base );
(C99 起)

转译 nptr 所指向的宽字符串中的整数值。

舍弃所有空白符(以调用 isspace() 鉴别),直到找到首个非空白符,然后取尽可能多的字符组成底 n (其中 n=base)的无符号整数表示,并将它们转换成一个整数值。合法的无符号整数值由下列部分组成:

  • (可选)正或负号
  • (可选)指示八进制底的前缀(0)(仅当底为 80 时应用)
  • (可选)指示十六进制底的前缀(0x0X)(仅当底为 160 时应用)
  • 一个数字序列

底的合法集是 {0,2,3,...,36} 。合法数字集对于底 2 整数是 {0,1},对于底3整数是 {0,1,2} ,以此类推。对于大于 10 的底,合法数字包含字母字符,从对于底 11 整数的 Aa 到对于底36整数的 Zz 。忽略字符大小写。

当前安装的 C 本地环境可能接受另外的数字格式。

如果 base 是 0,那么自动检测数值进制:如果前缀是 0,那么底是八进制,如果前缀是 0x0X,那么底是十六进制,否则底是十进制。

如果符号是输入序列的一部分,那么对从数字序列计算得来的数字值取反,如同用结果类型的一元减,它对无符号整数应用回卷规则。

函数将 endptr 所指向的指针设为指向最后转译的宽字符的后一宽字符。若 endptr 为空指针,则忽略它。

参数

nptr - 指向待转译的空终止宽字符串的指针
endptr - 指向宽字符指针的指针
base - 转译整数值的基底

返回值

成功时返回代表 str 内容的整数值。若转得的值落在对应类型之外,则出现值域错误,并返回 INTMAX_MAXINTMAX_MINUINTMAX_MAX0 中的最接近者。若无法进行转换,则返回 0

示例

#include <errno.h>
#include <inttypes.h>
#include <stdio.h>
#include <string.h>
#include <wchar.h>
 
int main(void)
{
  wchar_t* endptr;
 
  wprintf(L"%ld\n", wcstoimax(L" -123junk", &endptr, 10)); // 十进制
  wprintf(L"%ld\n", wcstoimax(L"11111111", &endptr, 2));   // 二进制
  wprintf(L"%ld\n", wcstoimax(L"XyZ", &endptr, 36));       // 三十六进制
  wprintf(L"%ld\n", wcstoimax(L"010", &endptr, 0));        // 八进制自动检测
  wprintf(L"%ld\n", wcstoimax(L"10", &endptr, 0));         // 十进制自动检测
  wprintf(L"%ld\n", wcstoimax(L"0x10", &endptr, 0));       // 十六进制自动检测
 
  // 值域错误
  // LONG_MAX+1 --> LONG_MAX
  errno = 0;
  wprintf(L"%ld\n", wcstoimax(L"9223372036854775808", &endptr, 10));
  wprintf(L"%s\n", strerror(errno));
}

输出:

-123
255
44027
8
10
16
9223372036854775807
Numerical result out of range


引用

  • C11 标准(ISO/IEC 9899:2011):
  • 7.8.2.4 The wcstoimax and wcstoumax functions (第 220 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.8.2.4 The wcstoimax and wcstoumax functions (第 201 页)

参阅

将字节字符串转换成 intmax_tuintmax_t
(函数)
(C95)(C99)
将宽字符串转换成整数值
(函数)
(C95)(C99)
将宽字符串转换成无符号整数值
(函数)