天天看點

Null-terminated multibyte strings (Strings) – 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 ++文檔 ||:----|