空终止多字节字符串
来自 cppreference.cn
空终止多字节字符串(NTMBS),或“多字节字符串”,是由非零字节序列后跟一个值为零的字节(终止空字符)组成的序列。
字符串中存储的每个字符可能占用多个字节。用于表示多字节字符字符串中字符的编码是与区域设置相关的:它可能是 UTF-8、GB18030、EUC-JP、Shift-JIS 等。例如,char 数组 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一个 NTMBS,在 UTF-8 多字节编码中保存字符串 "你好":前三个字节编码字符 你,后三个字节编码字符 好。以 GB18030 编码的相同字符串是 char 数组 {'\xc4', '\xe3', '\xba', '\xc3', '\0'},其中两个字符都编码为两个字节的序列。
在某些多字节编码中,任何给定的多字节字符序列可能根据之前的字节序列(称为“移位序列”)表示不同的字符。这种编码被称为有状态的:需要了解当前的移位状态才能解释每个字符。NTMBS 只有在其以初始移位状态开始和结束时才有效:如果使用了移位序列,则在终止空字符之前必须存在相应的反移位序列。此类编码的示例包括 BOCU-1 和 SCSU。
多字节字符字符串与空终止字节字符串(NTBS)在布局上兼容,也就是说,可以使用相同的工具进行存储、复制和检查,但计算字符数量除外。如果设置了正确的区域设置,I/O 函数也能处理多字节字符串。多字节字符串可以使用以下与区域设置相关的转换函数在宽字符串之间进行转换:
目录 |
[编辑] 函数
多字节/宽字符转换 | |
在头文件
<stdlib.h> 中定义 | |
返回下一个多字节字符的字节数 (函数) | |
将下一个多字节字符转换为宽字符 (函数) | |
(C11) |
将宽字符转换为其多字节表示 (函数) |
(C11) |
将窄多字节字符字符串转换为宽字符串 (函数) |
(C11) |
将宽字符串转换为窄多字节字符字符串 (函数) |
在头文件
<wchar.h> 中定义 | |
(C95) |
检查 mbstate_t 对象是否代表初始移位状态 (函数) |
(C95) |
如果可能,将单字节窄字符加宽为宽字符 (函数) |
(C95) |
如果可能,将宽字符缩小为单字节窄字符 (函数) |
(C95) |
返回下一个多字节字符的字节数,给定状态 (函数) |
(C95) |
将下一个多字节字符转换为宽字符,给定状态 (函数) |
(C95)(C11) |
将宽字符转换为其多字节表示,给定状态 (函数) |
(C95)(C11) |
将窄多字节字符字符串转换为宽字符串,给定状态 (函数) |
(C95)(C11) |
将宽字符串转换为窄多字节字符字符串,给定状态 (函数) |
在头文件
<uchar.h> 中定义 | |
(C23) |
将窄多字节字符转换为 UTF-8 编码 (函数) |
(C23) |
将 UTF-8 字符串转换为窄多字节编码 (函数) |
(C11) |
将窄多字节字符转换为 UTF-16 编码 (函数) |
(C11) |
将 UTF-16 字符转换为窄多字节编码 (函数) |
(C11) |
将窄多字节字符转换为 UTF-32 编码 (函数) |
(C11) |
将 UTF-32 字符转换为窄多字节编码 (函数) |
[编辑] 类型
在头文件
<uchar.h> 中定义 | |
在头文件
<wchar.h> 中定义 | |
(C95) |
迭代多字节字符串所需的转换状态信息 (类) |
在头文件
<uchar.h> 中定义 | |
(C23) |
8 位字符类型 (typedef) |
(C11) |
16 位字符类型 (typedef) |
(C11) |
32 位字符类型 (typedef) |
[编辑] 宏
在头文件
<limits.h> 中定义 | |
MB_LEN_MAX |
任何支持的区域设置中,多字节字符的最大字节数 (宏常量) |
在头文件
<stdlib.h> 中定义 | |
MB_CUR_MAX |
当前区域设置中,多字节字符的最大字节数 (宏变量) |
[编辑] 参考资料
- C23 标准 (ISO/IEC 9899:2024)
- 7.10 整数类型的大小 <limits.h> (p: 待定)
- 7.22 通用工具 <stdlib.h> (p: 待定)
- 7.28 Unicode 工具 <uchar.h> (p: 待定)
- 7.29 扩展多字节和宽字符工具 <wchar.h> (p: 待定)
- 7.31.12 通用工具 <stdlib.h> (p: 待定)
- 7.31.16 扩展多字节和宽字符工具 <wchar.h> (p: 待定)
- K.3.6 通用工具 <stdlib.h> (p: 待定)
- K.3.9 扩展多字节和宽字符工具 <wchar.h> (p: 待定)
- C17 标准 (ISO/IEC 9899:2018)
- 7.10 整数类型的大小 <limits.h> (p: 待定)
- 7.22 通用工具 <stdlib.h> (p: 待定)
- 7.28 Unicode 工具 <uchar.h> (p: 待定)
- 7.29 扩展多字节和宽字符工具 <wchar.h> (p: 待定)
- 7.31.12 通用工具 <stdlib.h> (p: 待定)
- 7.31.16 扩展多字节和宽字符工具 <wchar.h> (p: 待定)
- K.3.6 通用工具 <stdlib.h> (p: 待定)
- K.3.9 扩展多字节和宽字符工具 <wchar.h> (p: 待定)
- C11 标准 (ISO/IEC 9899:2011)
- 7.10 整数类型的大小 <limits.h> (p: 222)
- 7.22 通用工具 <stdlib.h> (p: 340-360)
- 7.28 Unicode 工具 <uchar.h> (p: 398-401)
- 7.29 扩展多字节和宽字符工具 <wchar.h> (p: 402-446)
- 7.31.12 通用工具 <stdlib.h> (p: 456)
- 7.31.16 扩展多字节和宽字符工具 <wchar.h> (p: 456)
- K.3.6 通用工具 <stdlib.h> (p: 604-614)
- K.3.9 扩展多字节和宽字符工具 <wchar.h> (p: 627-651)
- C99 标准 (ISO/IEC 9899:1999)
- 7.10 整数类型的大小 <limits.h> (p: 203)
- 7.20 通用工具 <stdlib.h> (p: 306-324)
- 7.24 扩展多字节和宽字符工具 <wchar.h> (p: 348-392)
- 7.26.10 通用工具 <stdlib.h> (p: 402)
- 7.26.12 扩展多字节和宽字符工具 <wchar.h> (p: 402)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 4.1.4 限制 <float.h> 和 <limits.h>
- 4.10 通用工具 <stdlib.h>
- 4.13.7 通用工具 <stdlib.h>
[编辑] 另请参阅
C++ 文档 关于 空终止多字节字符串
|