Null-terminated multibyte strings (Strings) – C 中文开发手册

[
  •   C 语言中文开发手册

    Null-terminated multibyte strings (Strings) - C 中文开发手册
    以空字符结尾的多字节字符串(NTMBS)或“多字节字符串”是一个非零字节序列,后跟一个值为零的字节(终止空字符)。存储在该字符串中的每个字符可占用多于一个字节。 用于表示多字节字符串中字符的编码是特定于语言环境的:它可以是UTF-8,GB18030,EUC-JP,Shift-JIS等。例如,字符数组{'\ xe4','\ xbd ','\ xa0','\ xe5','\ xa5','\ xbd','\ 0'}是以UTF-8多字节编码形式存储字符串“你好”的NTMBS:前三个字节编码字符【你】,接下来的三个字节编码字符【好】。 在GB18030中编码的字符串是字符数组{'\ xc4','\ xe3','\ xba','\ xc3','\ 0'},其中两个字符中的每一个都被编码为一个双字节 序列。在某些多字节编码中,任何给定的多字节字符序列都可能表示不同的字符,这取决于先前的字节序列,称为“移位序列”。这种编码被称为状态依赖:需要了解当前的转换状态来解释每个字符。NTMBS只有在开始和结束于初始转换状态时才有效:如果使用移位序列,则相应的非移位序列必须存在于终止空字符之前。这种编码的例子是BOCU-1和SCSU。多字节字符串与空字符串字符串(NTBS)是布局兼容的,也就是说,除了计算字符数外,可以使用相同的工具来存储,复制和检查。如果正确的语言环境有效,I / O函数还处理多字节字符串。使用以下与区域设置相关的转换函数,可以将多字节字符串转换为宽字符串并从中转换为宽字符串:

    多字节/宽字符转换

    | 在头文件<stdlib.h>中定义 ||:----|| mblen | 返回下一个多字节字符(函数)中的字节数|| mbtowc | 将下一个多字节字符转换为宽字符(函数)|| wctombwctomb_s(C11)| 将宽字符转换为其多字节表示(函数)|| mbstowcsmbstowcs_s(C11)| 将窄多字节字符串转换为宽字符串(函数)|| wcstombswcstombs_s(C11)| 将宽字符串转换为窄多字节字符串(函数)|| 在头文件<wchar.h>中定义 || mbsinit(C95)| 检查mbstate_t对象是否代表初始转换状态(函数)|| btowc(C95)| 如果可能的话将单字节窄字符扩展为宽字符(函数)|| wctob(C95)| 如果可能,则将宽字符缩小为单字节窄字符|(函数)| mbrlen(C95)| 返回给定状态(函数)下一个多字节字符的字节数|| mbrtowc(C95)| 将下一个多字节字符转换为宽字符,给定状态(函数)|| wcrtombwcrtomb_s(C95)(C11)| 将宽字符转换为其多字节表示,给定状态(函数)|| mbsrtowcsmbsrtowcs_s(C95)(C11)| 将一个窄的多字节字符串转换为宽字符串,给定状态(函数)|| wcsrtombswcsrtombs_s(C95)(C11)| 将宽字符串转换为窄多字节字符串,给定状态(函数)|| 在头文件<uchar.h>中定义 || mbrtoc16(C11)| 从一个窄多字节字符串(函数)生成下一个16位宽字符 || c16rtomb(C11)| 将16位宽字符转换为窄多字节字符串(函数)|| mbrtoc32(C11)| 从一个窄多字节字符串(函数)生成下一个32位宽字符|| c32rtomb(C11)| 将32位宽字符转换为窄多字节字符串(函数)|

    类型

    | 在头文件<wchar.h>中定义 ||:----|| mbstate_t(C95)| 转换多字节字符串(类)所需的转换状态信息|| 在头文件<uchar.h>中定义 || char16_t(C11)| 16位宽字符类型(typedef)|| char32_t(C11)| 32位宽字符类型(typedef)|

    | 在头文件<limits.h>中定义 ||:----|| MB_LEN_MAX | 对于任何受支持的语言环境(宏常量),多字节字符中的最大字节数|| 在头文件<stdlib.h> 中定义|| MB_CUR_MAX | 当前语言环境(宏变量)中多字节字符中的最大字节数|| 在头文件<uchar.h>中定义 || __STDC_UTF_16__(C11)| 表示mbrtoc16和c16rtomb(宏常量)使用UTF-16编码|| __STDC_UTF_32__(C11)| 指示由mbrtoc32和c32rtomb(宏常量)使用UTF-32编码|

    参考

    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>

    扩展内容

    | 用于Null终止的多字节字符串的C ++文档 ||:----|

  •   C 语言中文开发手册
    ]
    转载请保留页面地址:https://www.breakyizhan.com/c-3/27797.html

    posted on 2020-07-10 21:31  MrAit  阅读(167)  评论(0编辑  收藏  举报

    导航