空終止多位元組字串
來自 cppreference.com
空終止多位元組字串(NTMBS),或“多位元組字串”,是由非零位元組序列後跟一個值為零的位元組(終止空字元)組成的序列。
字串中儲存的每個字元可能佔用多個位元組。用於表示多位元組字元字串中字元的編碼是與區域設定相關的:它可能是 UTF-8、GB18030、EUC-JP、Shift-JIS 等。例如,char 陣列 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一個 NTMBS,在 UTF-8 多位元組編碼中儲存字串 "你好":前三個位元組編碼字元 你,後三個位元組編碼字元 好。以 GB18030 編碼的相同字串是 char 陣列 {'\xc4', '\xe3', '\xba', '\xc3', '\0'},其中兩個字元都編碼為兩個位元組的序列。
在某些多位元組編碼中,任何給定的多位元組字元序列可能根據之前的位元組序列(稱為“移位序列”)表示不同的字元。這種編碼被稱為有狀態的:需要了解當前的移位狀態才能解釋每個字元。NTMBS 只有在其以初始移位狀態開始和結束時才有效:如果使用了移位序列,則在終止空字元之前必須存在相應的反移位序列。此類編碼的示例包括 BOCU-1 和 SCSU。
多位元組字元字串與空終止位元組字串(NTBS)在佈局上相容,也就是說,可以使用相同的工具進行儲存、複製和檢查,但計算字元數量除外。如果設定了正確的區域設定,I/O 函式也能處理多位元組字串。多位元組字串可以使用以下與區域設定相關的轉換函式在寬字串之間進行轉換:
目錄 |
[編輯] 函式
多位元組/寬字元轉換 | |
在標頭檔案
<stdlib.h> 中定義 | |
返回下一個多位元組字元的位元組數 (函式) | |
將下一個多位元組字元轉換為寬字元 (函式) | |
(C11) |
將寬字元轉換為其多位元組表示 (函式) |
(C11) |
將窄多位元組字元字串轉換為寬字串 (函式) |
(C11) |
將寬字串轉換為窄多位元組字元字串 (函式) |
在標頭檔案
<wchar.h> 中定義 | |
(C95) |
檢查 mbstate_t 物件是否代表初始移位狀態 (函式) |
(C95) |
如果可能,將單位元組窄字元加寬為寬字元 (函式) |
(C95) |
如果可能,將寬字元縮小為單位元組窄字元 (函式) |
(C95) |
返回下一個多位元組字元的位元組數,給定狀態 (函式) |
(C95) |
將下一個多位元組字元轉換為寬字元,給定狀態 (函式) |
(C95)(C11) |
將寬字元轉換為其多位元組表示,給定狀態 (函式) |
(C95)(C11) |
將窄多位元組字元字串轉換為寬字串,給定狀態 (函式) |
(C95)(C11) |
將寬字串轉換為窄多位元組字元字串,給定狀態 (函式) |
在標頭檔案
<uchar.h> 中定義 | |
(C23) |
將窄多位元組字元轉換為 UTF-8 編碼 (函式) |
(C23) |
將 UTF-8 字串轉換為窄多位元組編碼 (函式) |
(C11) |
將窄多位元組字元轉換為 UTF-16 編碼 (函式) |
(C11) |
將 UTF-16 字元轉換為窄多位元組編碼 (函式) |
(C11) |
將窄多位元組字元轉換為 UTF-32 編碼 (函式) |
(C11) |
將 UTF-32 字元轉換為窄多位元組編碼 (函式) |
[編輯] 型別
在標頭檔案
<uchar.h> 中定義 | |
在標頭檔案
<wchar.h> 中定義 | |
(C95) |
迭代多位元組字串所需的轉換狀態資訊 (類) |
在標頭檔案
<uchar.h> 中定義 | |
(C23) |
8 位字元型別 (typedef) |
(C11) |
16 位字元型別 (typedef) |
(C11) |
32 位字元型別 (typedef) |
[編輯] 宏
在標頭檔案
<limits.h> 中定義 | |
MB_LEN_MAX |
任何支援的區域設定中,多位元組字元的最大位元組數 (宏常量) |
在標頭檔案
<stdlib.h> 中定義 | |
MB_CUR_MAX |
當前區域設定中,多位元組字元的最大位元組數 (宏變數) |
[編輯] 參考資料
- C23 標準 (ISO/IEC 9899:2024)
- 7.10 整數型別的大小 <limits.h> (p: 待定)
- 7.22 通用工具 <stdlib.h> (p: 待定)
- 7.28 Unicode 工具 <uchar.h> (p: 待定)
- 7.29 擴充套件多位元組和寬字元工具 <wchar.h> (p: 待定)
- 7.31.12 通用工具 <stdlib.h> (p: 待定)
- 7.31.16 擴充套件多位元組和寬字元工具 <wchar.h> (p: 待定)
- K.3.6 通用工具 <stdlib.h> (p: 待定)
- K.3.9 擴充套件多位元組和寬字元工具 <wchar.h> (p: 待定)
- C17 標準 (ISO/IEC 9899:2018)
- 7.10 整數型別的大小 <limits.h> (p: 待定)
- 7.22 通用工具 <stdlib.h> (p: 待定)
- 7.28 Unicode 工具 <uchar.h> (p: 待定)
- 7.29 擴充套件多位元組和寬字元工具 <wchar.h> (p: 待定)
- 7.31.12 通用工具 <stdlib.h> (p: 待定)
- 7.31.16 擴充套件多位元組和寬字元工具 <wchar.h> (p: 待定)
- K.3.6 通用工具 <stdlib.h> (p: 待定)
- K.3.9 擴充套件多位元組和寬字元工具 <wchar.h> (p: 待定)
- 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>
[編輯] 另請參閱
C++ 文件 關於 空終止多位元組字串
|