命名空間
變體
動作

以空字元終止的多位元組字串

出自 cppreference.com
< cpp‎ | string

以空字元終止的多位元組字串 (Null-terminated multibyte string, NTMBS),或稱「多位元組字串」,是一串非零位元組,後接一個值為零的位元組(終止空字元)。

字串中儲存的每個字元可能佔用超過一個位元組。用於表示多位元組字元字串的編碼取決於區域設定 (locale):可能是 UTF-8、GB18030、EUC-JP、Shift-JIS 等。例如,char 陣列 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一個以 UTF-8 多位元組編碼儲存字串 "你好" 的 NTMBS:前三個位元組編碼了「你」字,後三個位元組編碼了「好」字。同樣的字串若以 GB18030 編碼,則為 char 陣列 {'\xc4', '\xe3', '\xba', '\xc3', '\0'},其中每個字元皆編碼為兩個位元組序列。

在某些多位元組編碼中,任何給定的多位元組字元序列可能會根據之前的位元組序列(稱為「位移序列」或 shift sequences)代表不同的字元。這類編碼稱為與狀態相關 (state-dependent):解析每個字元時需要了解當前的位移狀態。只有當 NTMBS 以初始位移狀態開始並結束時,它才是有效的:如果使用了位移序列,則在終止空字元之前必須存在相應的恢復原始狀態序列 (unshift sequence)。這類編碼的範例包括 7-bit JIS、BOCU-1 和 SCSU

多位元組字元字串在佈局上與以空字元終止的位元組字串 (NTBS) 相容,意即它們可以使用相同的工具進行儲存、複製和檢查,唯獨計算字元數時除外。若已設定正確的區域設定,I/O 函式也能處理多位元組字串。多位元組字串可使用 std::codecvt 成員函式、std::wstring_convert 或以下與區域設定相關的轉換函式,與寬字串 (wide strings) 互相轉換。

目錄

[編輯] 函式

多位元組/寬字元轉換
定義於標頭檔 <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 文件 關於 以空字元終止的多位元組字串
English Deutsch 日本語 中文(简体) 中文(繁體)