[英]Understanding and writing wchar_t in C
我目前正在為學校項目重寫(一部分) printf()
函數。 總的來說,我們需要用幾個標志、轉換、長度修飾符來重現函數的行為......
我唯一要做的並且讓我陷入困境的是標志%C
/ %S
(或%lc
/ %ls
)。
到目前為止,我已經收集到wchar_t
是一種可以在多個字節上存儲字符的類型,以便接受更多的字符或符號,因此幾乎可以與所有語言兼容,而不管它們的字母表和特殊字符如何。
但是,我無法找到有關wchar
在機器上的外觀的任何具體信息,它的實際長度(顯然因編譯器、操作系統等幾個因素而異)或如何實際編寫它們。
先感謝您
請注意,我們被允許使用的功能是有限的。 唯一允許的函數是write()
、 malloc()
、 free()
和exit()
。 我們必須能夠自己編寫任何其他必需的函數。
總而言之,我在這里問的是一些關於如何用盡可能少的代碼“手動”解釋和編寫任何wchar_t
字符的信息,以便我可以嘗試理解整個過程並自己編寫代碼。
wchar_t
與 char 類似,它是一個數字,但在顯示char
或wchar_t
我們不想看到數字,而是與數字對應的繪制字符。 從數字到字符的映射既不是由char
也不是由wchar_t
定義的,它們取決於系統。 因此,除了大小之外, char
和wchar_t
之間的最終用法沒有區別。
鑒於上述情況, printf("%ls")
最簡單的實現是您知道與char
和wchar_t
一起使用的系統編碼是什么。 例如,在我的系統中, char
為 8 位,編碼為 UTF-8,而wchar_t
為 32 位,編碼為 UTF-32。 所以 printf 實現只是從 UTF-32 轉換為 UTF-8 並輸出結果。
更通用的實現必須支持不同的和可配置的編碼,並且可能需要檢查當前的編碼是什么。 在這種情況下,必須使用wcsnrtombs()
或iconv()
等函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.