簡體   English   中英

理解和用 C 編寫 wchar_t

[英]Understanding and writing wchar_t in C

我目前正在為學校項目重寫(一部分) printf()函數。 總的來說,我們需要用幾個標志、轉換、長度修飾符來重現函數的行為......

我唯一要做的並且讓我陷入困境的是標志%C / %S (或%lc / %ls )。

到目前為止,我已經收集到wchar_t是一種可以在多個字節上存儲字符的類型,以便接受更多的字符或符號,因此幾乎可以與所有語言兼容,而不管它們的字母表和特殊字符如何。

但是,我無法找到有關wchar在機器上的外觀的任何具體信息,它的實際長度(顯然因編譯器、操作系統等幾個因素而異)或如何實際編寫它們。

先感謝您

請注意,我們被允許使用的功能是有限的。 唯一允許的函數是write()malloc()free()exit() 我們必須能夠自己編寫任何其他必需的函數。

總而言之,我在這里問的是一些關於如何用盡可能少的代碼“手動”解釋和編寫任何wchar_t字符的信息,以便我可以嘗試理解整個過程並自己編寫代碼。

wchar_t與 char 類似,它是一個數字,但在顯示charwchar_t我們不想看到數字,而是與數字對應的繪制字符。 從數字到字符的映射既不是由char也不是由wchar_t定義的,它們取決於系統。 因此,除了大小之外, charwchar_t之間的最終用法沒有區別。

鑒於上述情況, printf("%ls")最簡單的實現是您知道與charwchar_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM