在线文档教程
C++
字符串 | Strings

Null-terminated multibyte strings

空终止多字节字符串

以空结尾的多字节字符串%28NTMBS%29,或“多字节字符串”,是一个非零字节序列,后面跟着一个值为零的字节,值为零28--终止空字符%29。

存储在字符串中的每个字符可以占用多个字节。用于表示多字节字符串中的字符的编码是特定于地区的:它可能是utf-8、gb 18030、EUC-jp、Shift-jis等。例如,char数组。{'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'}是否有一个NTMBS保存字符串"你好"在utf-8多字节编码中:四字节编码字符你,接下来的三个字节编码字符好。{'\xc4', '\xe3', '\xba', '\xc3', '\0'},其中两个字符都被编码为两个字节序列。

在一些多字节编码中,任何给定的多字节字符序列都可能表示不同的字符,这取决于以前的字节序列,称为“移位序列”。这种编码被称为状态依赖的:需要了解当前的移位状态才能解释每个字符。NTMBS只有在初始移位状态开始和结束时才有效:如果使用了移位序列,则在终止空字符之前必须出现相应的未移位序列。这类编码的例子有7位JIS、BOCU-1和SCSU...

多字节字符串的布局与以空结尾的字节字符串%28NTBS%29兼容,也就是说,除了计算字符数外,还可以使用相同的工具存储、复制和检查。如果正确的区域设置有效,则I/O函数也处理多字节字符串。多字节字符串可以使用std::codecvt成员职能,std::wstring_convert,或下列与区域设置相关的转换函数:

多字节/宽字符转换

在标头中定义<cstdlib>

*。

mblen返回下一个多字节字符%28函数%29中的字节数

MBTowc将下一个多字节字符转换为宽字符%28功能%29

将宽字符转换为其多字节表示形式%28功能%29

mbstowcs将窄多字节字符串转换为宽字符串%28功能%29

将宽字符串转换为窄多字节字符串%28函数%29

在标头中定义<cwchar>

mbsinit检查mbstate是否[医]对象表示初始移位状态%28函数%29

btwc将单个字节窄字符扩展为宽字符,如果可能的话,将%28函数%29扩展到宽字符。

wctob将宽字符缩小为单字节窄字符,如果可能的话,将%28函数%29缩小。

mbrlen返回下一个多字节字符中的字节数,给定状态%28函数%29

如果状态为%28函数%29,则mbrTowc将下一个多字节字符转换为宽字符。

如果状态为%28函数%29,wcrgrave将宽字符转换为其多字节表示形式。

mbsrTowcs将一个窄的多字节字符串转换为宽字符串,给定状态%28功能%29

wcsrtomb将宽字符串转换为窄多字节字符串,给定状态%28函数%29。

在标头中定义<cuchar>

mbrtoc 16%28c++11%29从窄的多字节字符串%28函数%29生成下一个16位宽字符。

c16 rgrave%28c++11%29将16位宽字符转换为窄多字节字符串%28函数%29。

mbrtoc 32%28c++11%29从窄的多字节字符串%28函数%29生成下一个32位宽字符。

c32rgrave%28c++11%29将32位宽字符转换为窄多字节字符串%28函数%29。

类型

在标头中定义<cwchar>

*。

安培[医]迭代多字节字符串所需的t转换状态信息%28类%29

在标头中定义<climits>

*。

甲基溴[医]伦[医]多字节字符中最大最大字节数%28宏常量%29

在标头中定义<cstdlib>

甲基溴[医]库尔[医]当前C语言环境中多字节字符的最大最大字节数%28宏变量%29

在标头中定义<cuchar>

[医][医]STDC[医]乌特夫[医]十六[医][医]指示mbrtoc 16和c16 rgrave%28宏常量%29使用utf-16编码。

[医][医]STDC[医]乌特夫[医]三十二[医][医]指示mbrtoc 32和c32rgrave%28宏常量%29使用utf-32编码。

另见

以空结尾的多字节字符串的c文档

*。

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/string/multi字节