空終止多位元組字串
來自 cppreference.com
以空字元結尾的多位元組字串(NTMBS),或稱“多位元組字串”,是由非零位元組序列後跟一個值為零的位元組(終止空字元)組成。
字串中儲存的每個字元可能佔用多個位元組。用於表示多位元組字串中字元的編碼是與區域設定相關的:它可以是 UTF-8、GB18030、EUC-JP、Shift-JIS 等。例如,字元陣列 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一個 NTMBS,在 UTF-8 多位元組編碼中儲存著字串 "你好":前三個位元組編碼字元 你,後三個位元組編碼字元 好。在 GB18030 中編碼的相同字串是字元陣列 {'\xc4', '\xe3', '\xba', '\xc3', '\0'},其中兩個字元都編碼為兩位元組序列。
在某些多位元組編碼中,任何給定的多位元組字元序列都可以根據之前的位元組序列(稱為“移位序列”)表示不同的字元。這種編碼被稱為狀態依賴型:解釋每個字元需要了解當前的移位狀態。NTMBS 僅在其以初始移位狀態開始和結束時才有效:如果使用了移位序列,則在終止空字元之前必須存在相應的非移位序列。此類編碼的示例包括 7 位 JIS、BOCU-1 和 SCSU。
多位元組字串與以空字元結尾的位元組字串(NTBS)是佈局相容的,也就是說,可以使用相同的設施進行儲存、複製和檢查,只是計算字元數除外。如果使用了正確的區域設定,I/O 函式也能處理多位元組字串。多位元組字串可以使用 std::codecvt 成員函式、std::wstring_convert 或以下與區域設定相關的轉換函式在寬字串之間進行轉換:
目錄 |
[編輯] 函式
多位元組/寬字元轉換 | |
| 定義於標頭檔案
<cstdlib> | |
| 返回下一個多位元組字元的位元組數 (函式) | |
| 將下一個多位元組字元轉換為寬字元 (函式) | |
| 將寬字元轉換為其多位元組表示 (函式) | |
| 將窄多位元組字元字串轉換為寬字串 (函式) | |
| 將寬字串轉換為窄多位元組字元字串 (函式) | |
| 在標頭檔案
<cwchar> 中定義 | |
| 返回下一個多位元組字元的位元組數,給定狀態 (函式) | |
| 檢查 std::mbstate_t 物件是否表示初始移位狀態 (函式) | |
| 如果可能,將單位元組窄字元加寬為寬字元 (函式) | |
| 如果可能,將寬字元縮小為單位元組窄字元 (函式) | |
| 將下一個多位元組字元轉換為寬字元,給定狀態 (函式) | |
| 將寬字元轉換為其多位元組表示,給定狀態 (函式) | |
| 將窄多位元組字元字串轉換為寬字串,給定狀態 (函式) | |
| 將寬字串轉換為窄多位元組字元字串,給定狀態 (函式) | |
| 定義於標頭檔案
<cuchar> | |
| (C++20) |
將窄多位元組字元轉換為 UTF-8 編碼 (函式) |
| (C++20) |
將 UTF-8 字串轉換為窄多位元組編碼 (函式) |
| (C++11) |
將窄多位元組字元轉換為 UTF-16 編碼 (函式) |
| (C++11) |
將 UTF-16 字元轉換為窄多位元組編碼 (函式) |
| (C++11) |
將窄多位元組字元轉換為 UTF-32 編碼 (函式) |
| (C++11) |
將 UTF-32 字元轉換為窄多位元組編碼 (函式) |
[編輯] 型別
| 在標頭檔案
<cwchar> 中定義 | |
| 迭代多位元組字串所需的轉換狀態資訊 (類) | |
[編輯] 宏
| 在標頭檔案
<climits> 中定義 | |
| MB_LEN_MAX |
多位元組字元中的最大位元組數 (宏常量) |
| 定義於標頭檔案
<cstdlib> | |
| MB_CUR_MAX |
當前 C 語言環境多位元組字元中的最大位元組數 (宏變數) |
| 定義於標頭檔案
<cuchar> | |
| __STDC_UTF_16__ (C++11) |
表示 mbrtoc16 和 c16rtomb 使用 UTF-16 編碼 (宏常量) |
| __STDC_UTF_32__ (C++11) |
表示 mbrtoc32 和 c32rtomb 使用 UTF-32 編碼 (宏常量) |
[編輯] 另請參閱
| C 文件 用於 以空字元結尾的多位元組字串
|