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。