297 lines
17 KiB
HTML
297 lines
17 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>空终止多字节字符串</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_string_multibyte skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading">空终止多字节字符串</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-string.html">string</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p>空终止多字节字符串( null-terminated multibyte string, NTMBS ),或“多字节字符串”,是后随拥有零值的字节(空终止字符)的非零字节序列。</p>
|
|
<p>存储于该字符串中的每个字符可能占用多于一个字节。用于表示字符的编码是本地环境限定的:它可以是 UTF-8 、 GB18030 、 EUC-JP 、 Shift-JIS 等。例如,字符数组 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">{</span><span class="st0">'<span class="es2">\xe4</span>'</span>,<span class="st0">'<span class="es2">\xbd</span>'</span>,<span class="st0">'<span class="es2">\xa0</span>'</span>,<span class="st0">'<span class="es2">\xe5</span>'</span>,<span class="st0">'<span class="es2">\xa5</span>'</span>,<span class="st0">'<span class="es2">\xbd</span>'</span>,<span class="st0">'<span class="es5">\0</span>'</span><span class="br0">}</span></span></span> 是一个以UTF8编码包含 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">"你好"</span></span></span> 的 NTMBS :首三个字节编码字符 "你" ,接下来三个字节编码字符 "好" 。编码于 GB18030 的相同字符串是字符数组 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">{</span><span class="st0">'<span class="es2">\xc4</span>'</span>, <span class="st0">'<span class="es2">\xe3</span>'</span>, <span class="st0">'<span class="es2">\xba</span>'</span>, <span class="st0">'<span class="es2">\xc3</span>'</span>, <span class="st0">'<span class="es5">\0</span>'</span><span class="br0">}</span></span></span> ,其中二个字符各编码为双字节序列。</p>
|
|
<p>一些多字节编码中,任何给定的多字节字符序列可以根据之前的字节序列,称之为“迁移序列”,表示不同的字符。这种编码被称为状态依赖的:要求知晓当前迁移状态以转译每个字符。 NTMBS 仅若以初始迁移状态开始及结束才合法:若使用迁移序列,则对应的无迁移序列必须在空终止字符前存在。这种编码的例子是 7-bit JIS 、 BOCU-1 及 <a rel="nofollow" class="external text" href="http://www.unicode.org/reports/tr6">SCSU</a> 。</p>
|
|
<p>多字节字符串与空终止字节字符串( NTBS )布局兼容,即能用相同的设施存储、复制并检验,除了计算字符数。若当前本地环境生效,则 I/O 函数亦处理多字节字符串。多字节字符串可用 <span class="t-lc"><a href="cpp-locale-codecvt.html">std::codecvt</a></span> 成员函数、 <span class="t-lc"><a href="cpp-locale-wstring_convert.html">std::wstring_convert</a></span> 或下列依赖本地环境的转换函数与宽字符串相互转换:</p>
|
|
<h3><span class="mw-headline" id=".E5.A4.9A.E5.AD.97.E8.8A.82.2F.E5.AE.BD.E5.AD.97.E7.AC.A6.E4.B8.B2.E8.BD.AC.E6.8D.A2">多字节/宽字符串转换</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc-header">
|
|
<td colspan="2">
|
|
<div>定义于头文件 <code><a href="cpp-header-cstdlib.html"><cstdlib></a></code></div>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-mblen.html"><span class="t-lines"><span>mblen</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>返回下一个多字节字符中的字节数<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-mbtowc.html"><span class="t-lines"><span>mbtowc</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>将下一个多字节字符转换成宽字符<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-wctomb.html"><span class="t-lines"><span>wctomb</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>转换宽字符为其多字节表示<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-mbstowcs.html"><span class="t-lines"><span>mbstowcs</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>转换窄多字节字符串为宽字符串<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-wcstombs.html"><span class="t-lines"><span>wcstombs</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>转换宽字符串为窄多字节字符串<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc-header">
|
|
<td colspan="2">
|
|
<div>定义于头文件 <code><a href="cpp-header-cwchar.html"><cwchar></a></code></div>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-mbsinit.html"><span class="t-lines"><span>mbsinit</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>检查 mbstate_t 对象是否表示初始迁移状态<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-btowc.html"><span class="t-lines"><span>btowc</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>若可能,则加宽单字节窄字符为宽字符<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-wctob.html"><span class="t-lines"><span>wctob</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>若可能,则窄化宽字符为单字节窄字符<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-mbrlen.html"><span class="t-lines"><span>mbrlen</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>给定状态,返回下一个多字节字符中的字节数<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-mbrtowc.html"><span class="t-lines"><span>mbrtowc</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>给定状态,转换下个多字节字符为宽字符<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-wcrtomb.html"><span class="t-lines"><span>wcrtomb</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>给定状态,转换宽字符到其多字节表示<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-mbsrtowcs.html"><span class="t-lines"><span>mbsrtowcs</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>给定状态,转换窄多字节字符串到宽字符串<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-wcsrtombs.html"><span class="t-lines"><span>wcsrtombs</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>给定状态,转换宽字符串为窄多字节字符串<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc-header">
|
|
<td colspan="2">
|
|
<div>定义于头文件 <code><a href="cpp-header-cuchar.html"><cuchar></a></code></div>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-mbrtoc8.html"><span class="t-lines"><span>mbrtoc8</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>转换窄多字节字符为 UTF-8 编码<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-c8rtomb.html"><span class="t-lines"><span>c8rtomb</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>转换 UTF-8 字符串为窄多字节编码<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-mbrtoc16.html"><span class="t-lines"><span>mbrtoc16</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>转换窄多字节字符为 UTF-16 编码<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-c16rtomb.html"><span class="t-lines"><span>c16rtomb</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>转换 16 位宽字符为窄多字节字符串<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-mbrtoc32.html"><span class="t-lines"><span>mbrtoc32</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>转换窄多字节字符为 UTF-32 编码<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-c32rtomb.html"><span class="t-lines"><span>c32rtomb</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>转换 32 位宽字符为窄多字节字符串<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E7.B1.BB.E5.9E.8B">类型</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc-header">
|
|
<td colspan="2">
|
|
<div>定义于头文件 <code><a href="cpp-header-cwchar.html"><cwchar></a></code></div>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-string-multibyte-mbstate_t.html"><span class="t-lines"><span>mbstate_t</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>迭代多字节字符串所需的转换状态信息<br />
|
|
<span class="t-mark">(类)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E5.AE.8F">宏</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc-header">
|
|
<td colspan="2">
|
|
<div>定义于头文件 <code><a href="cpp-header-climits.html"><climits></a></code></div>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span>MB_LEN_MAX</span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>多字节字符中的最大字节数<br />
|
|
<span class="t-mark">(宏常量)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc-header">
|
|
<td colspan="2">
|
|
<div>定义于头文件 <code><a href="cpp-header-cstdlib.html"><cstdlib></a></code></div>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span>MB_CUR_MAX</span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>当前 C 本地环境中多字节字符的最大字节数<br />
|
|
<span class="t-mark">(宏变量)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc-header">
|
|
<td colspan="2">
|
|
<div>定义于头文件 <code><a href="cpp-header-cuchar.html"><cuchar></a></code></div>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span>__STDC_UTF_16__</span></span></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指示 mbrtoc16 与 c16rtomb 使用 UTF-16 编码<br />
|
|
<span class="t-mark">(宏常量)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><span class="t-lines"><span>__STDC_UTF_32__</span></span></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指示 mbrtoc32 与 c32rtomb 使用 UTF-32 编码<br />
|
|
<span class="t-mark">(宏常量)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin"></table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|