C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- std::basic_string
- std::basic_string_view
- 空终止字节字符串
- 空终止多字节字符串
- std::mbsinit
- std::mbtowc
- std::mbstowcs
- std::btowc
- std::c8rtomb
- std::mbrtoc8
- std::mbrtowc
- std::mbsrtowcs
- std::mbrtoc16
- std::mbrtoc32
- std::mblen
- std::wctomb
- std::wcstombs
- std::wctob
- std::wcrtomb
- std::wcsrtombs
- std::c16rtomb
- std::c32rtomb
- std::mbrlen
- std::mbstate_t
- 空终止宽字符串
- std::char_traits
- 注释
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
空终止多字节字符串
空终止多字节字符串( null-terminated multibyte string, NTMBS ),或“多字节字符串”,是后随拥有零值的字节(空终止字符)的非零字节序列。
存储于该字符串中的每个字符可能占用多于一个字节。用于表示字符的编码是本地环境限定的:它可以是 UTF-8 、 GB18030 、 EUC-JP 、 Shift-JIS 等。例如,字符数组 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一个以UTF8编码包含 "你好" 的 NTMBS :首三个字节编码字符 "你" ,接下来三个字节编码字符 "好" 。编码于 GB18030 的相同字符串是字符数组 {'\xc4', '\xe3', '\xba', '\xc3', '\0'} ,其中二个字符各编码为双字节序列。
一些多字节编码中,任何给定的多字节字符序列可以根据之前的字节序列,称之为“迁移序列”,表示不同的字符。这种编码被称为状态依赖的:要求知晓当前迁移状态以转译每个字符。 NTMBS 仅若以初始迁移状态开始及结束才合法:若使用迁移序列,则对应的无迁移序列必须在空终止字符前存在。这种编码的例子是 7-bit JIS 、 BOCU-1 及 SCSU 。
多字节字符串与空终止字节字符串( NTBS )布局兼容,即能用相同的设施存储、复制并检验,除了计算字符数。若当前本地环境生效,则 I/O 函数亦处理多字节字符串。多字节字符串可用 std::codecvt 成员函数、 std::wstring_convert 或下列依赖本地环境的转换函数与宽字符串相互转换:
多字节/宽字符串转换
定义于头文件
<cstdlib> | |
返回下一个多字节字符中的字节数 (函数) | |
将下一个多字节字符转换成宽字符 (函数) | |
转换宽字符为其多字节表示 (函数) | |
转换窄多字节字符串为宽字符串 (函数) | |
转换宽字符串为窄多字节字符串 (函数) | |
定义于头文件
<cwchar> | |
检查 mbstate_t 对象是否表示初始迁移状态 (函数) | |
若可能,则加宽单字节窄字符为宽字符 (函数) | |
若可能,则窄化宽字符为单字节窄字符 (函数) | |
给定状态,返回下一个多字节字符中的字节数 (函数) | |
给定状态,转换下个多字节字符为宽字符 (函数) | |
给定状态,转换宽字符到其多字节表示 (函数) | |
给定状态,转换窄多字节字符串到宽字符串 (函数) | |
给定状态,转换宽字符串为窄多字节字符串 (函数) | |
定义于头文件
<cuchar> | |
(C++20) |
转换窄多字节字符为 UTF-8 编码 (函数) |
(C++20) |
转换 UTF-8 字符串为窄多字节编码 (函数) |
(C++11) |
转换窄多字节字符为 UTF-16 编码 (函数) |
(C++11) |
转换 16 位宽字符为窄多字节字符串 (函数) |
(C++11) |
转换窄多字节字符为 UTF-32 编码 (函数) |
(C++11) |
转换 32 位宽字符为窄多字节字符串 (函数) |
类型
定义于头文件
<cwchar> | |
迭代多字节字符串所需的转换状态信息 (类) |
宏
定义于头文件
<climits> | |
MB_LEN_MAX |
多字节字符中的最大字节数 (宏常量) |
定义于头文件
<cstdlib> | |
MB_CUR_MAX |
当前 C 本地环境中多字节字符的最大字节数 (宏变量) |
定义于头文件
<cuchar> | |
__STDC_UTF_16__ |
指示 mbrtoc16 与 c16rtomb 使用 UTF-16 编码 (宏常量) |
__STDC_UTF_32__ |
指示 mbrtoc32 与 c32rtomb 使用 UTF-32 编码 (宏常量) |