命名空间
变体
操作

空终止多字节字符串

来自 cppreference.cn
< cpp‎ | string

以空字符结尾的多字节字符串(NTMBS),或称“多字节字符串”,是由非零字节序列后跟一个值为零的字节(终止空字符)组成。

字符串中存储的每个字符可能占用多个字节。用于表示多字节字符串中字符的编码是与区域设置相关的:它可以是 UTF-8、GB18030、EUC-JP、Shift-JIS 等。例如,字符数组 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一个 NTMBS,在 UTF-8 多字节编码中保存着字符串 "你好":前三个字节编码字符 你,后三个字节编码字符 好。在 GB18030 中编码的相同字符串是字符数组 {'\xc4', '\xe3', '\xba', '\xc3', '\0'},其中两个字符都编码为两字节序列。

在某些多字节编码中,任何给定的多字节字符序列都可以根据之前的字节序列(称为“移位序列”)表示不同的字符。这种编码被称为状态依赖型:解释每个字符需要了解当前的移位状态。NTMBS 仅在其以初始移位状态开始和结束时才有效:如果使用了移位序列,则在终止空字符之前必须存在相应的非移位序列。此类编码的示例包括 7 位 JIS、BOCU-1 和 SCSU

多字节字符串与以空字符结尾的字节字符串(NTBS)是布局兼容的,也就是说,可以使用相同的设施进行存储、复制和检查,只是计算字符数除外。如果使用了正确的区域设置,I/O 函数也能处理多字节字符串。多字节字符串可以使用 std::codecvt 成员函数、std::wstring_convert 或以下与区域设置相关的转换函数在宽字符串之间进行转换:

目录

[编辑] 函数

多字节/宽字符转换
定义于头文件 <cstdlib>
返回下一个多字节字符的字节数
(函数) [编辑]
将下一个多字节字符转换为宽字符
(函数) [编辑]
将宽字符转换为其多字节表示
(函数) [编辑]
将窄多字节字符字符串转换为宽字符串
(函数) [编辑]
将宽字符串转换为窄多字节字符字符串
(函数) [编辑]
在头文件 <cwchar> 中定义
返回下一个多字节字符的字节数,给定状态
(函数) [编辑]
检查 std::mbstate_t 对象是否表示初始移位状态
(函数) [编辑]
如果可能,将单字节窄字符加宽为宽字符
(函数) [编辑]
如果可能,将宽字符缩小为单字节窄字符
(函数) [编辑]
将下一个多字节字符转换为宽字符,给定状态
(函数) [编辑]
将宽字符转换为其多字节表示,给定状态
(函数) [编辑]
将窄多字节字符字符串转换为宽字符串,给定状态
(函数) [编辑]
将宽字符串转换为窄多字节字符字符串,给定状态
(函数) [编辑]
定义于头文件 <cuchar>
(C++20)
将窄多字节字符转换为 UTF-8 编码
(函数) [编辑]
(C++20)
将 UTF-8 字符串转换为窄多字节编码
(函数) [编辑]
(C++11)
将窄多字节字符转换为 UTF-16 编码
(函数) [编辑]
(C++11)
将 UTF-16 字符转换为窄多字节编码
(函数) [编辑]
(C++11)
将窄多字节字符转换为 UTF-32 编码
(函数) [编辑]
(C++11)
将 UTF-32 字符转换为窄多字节编码
(函数) [编辑]

[编辑] 类型

在头文件 <cwchar> 中定义
迭代多字节字符串所需的转换状态信息
(类) [编辑]

[编辑]

在头文件 <climits> 中定义
MB_LEN_MAX
多字节字符中的最大字节数
(宏常量) [编辑]
定义于头文件 <cstdlib>
MB_CUR_MAX
当前 C 语言环境多字节字符中的最大字节数
(宏变量)[编辑]
定义于头文件 <cuchar>
__STDC_UTF_16__
(C++11)
表示 mbrtoc16 和 c16rtomb 使用 UTF-16 编码
(宏常量)
__STDC_UTF_32__
(C++11)
表示 mbrtoc32 和 c32rtomb 使用 UTF-32 编码
(宏常量)

[编辑] 另请参阅

C 文档 用于 以空字符结尾的多字节字符串