心理

當前位置 /首頁/完美生活/心理/列表

c語言中寬度說明是什麼

c語言中寬度說明是什麼

C語言原本是在英文環境中設計的,主要的字元集是7位的ASCII碼,8位的byte(字節)是常見的字元編碼單位。但是國際化軟件必須能夠表示不同的字元,而這些字元數量龐大,無法使用一個字節編碼。

C95標準化了兩種表示大型字元集的方法:寬字元(wide character,該字元集內每個字元使用相同的位長)以及多字節字元(multibyte character,每個字元可以是一到多個字節不等,而某個字節序列的字元值由字元串或流(stream)所在的環境背景決定)。

自從1994年的增補之後,C語言不只提供char類型,還提供wchar_t類型(寬字元),此類型定義在stddef.h 頭檔案中。wchar_t指定的寬字節類型足以表示某個實現版本擴展字元集的任何元素。在多字節字元集中,每個字元的編碼寬度都不等,可以是一個字節,也可以是多個字節。原始碼字元集和執行字元集都可能包含多字節字元。多字節字元可以被用於字元的常量、字元串字面值(string literal)、標識符(IDEntifier)、註釋(comment),以及頭檔案。

C語言本身並沒有定義或指定任何編碼集合,或任何字元集(基本原始碼字元集和基本執行字元集除外),而是由其實現指定如何編碼寬字元,以及要支援什麼類型的多字節字元編碼機制。

雖然C標準沒有支援Unicode字元集,但是許多實現版本使用Unicode轉換格式UTF-16和UTF-32來處理寬字元。如果遵循Unicode標準,wchar_t類型至少是16或32位長,而wchar_t類型的一個值就代表一個Unicode字元。UTF-8是一個由Unicode Consortium(萬國碼聯盟)定義的實現,可以表示Unicode字元集的所有字元。UTF-8字元所使用的空間大小從一個字節到四個字節都有可能。

多字節字元和寬字元(也就是wchar_t)的主要差異在於寬字元佔用的字節數目都一樣,而多字節字元的字節數目不等,這樣的表示方式使得多字節字元串比寬字元串更難處理。比方說,即使字元'A'可以用一個字節來表示,但是要在多字節的字元串中找到此字元,就不能使用簡單的字節比對,因爲即使在某個位置找到相符合的字節,此字節也不見得是一個字元,它可能是另一個不同字元的一部分。然而,多字節字元相當適合用來將文字存儲成檔案。

C提供了一些標準函數,可以將多字節字元轉換爲wchar_t,或將寬字元轉換爲多字節字元。比方說,如果C 編譯器使用Unicode 標準的UTF-16 和UTF-8,那麼下面調用wctomb()函數就可以獲得字元的多字節表示方式(注:wctomb = wide character to multibyte)。

TAG標籤:語言 #