2012-09-24 98 views
2

我的變量是在一個寬字符串的特定內部實現中,但我可以很容易地將它變成寬字符數組。問題是我需要將它提供給只接受字符數組的庫函數。將寬字符串或寬字符數組轉換爲簡單字符數組的最簡單方法?

所以我最終是什麼樣子的:

wchar_t* wstr; 

// char* str = "need some processing here"; 

function(str); 

那麼,有沒有一種簡單的方法還是應該我只是性格做手工人物?

+0

看一看'wcstombs'應該工作。 – chris

+2

這取決於你想要對結果做什麼以及原始內容。如果你只是想處理ASCII字符,你會想'std :: ctype :: narrow()'。如果函數需要多字節編碼,像'wcstombs()'需要。請注意,後者通常不被視爲字符,而是一系列字節。 –

+0

這似乎對我有用,雖然我找到了一個更好的解決方案來解決不需要此轉換的問題。不過謝謝,無論如何。 –

回答

2

char *可能意味着很多東西。如果採用char *的函數實際上採用UTF8,則可以將UTF16或UTF32轉換爲UTF8。 wchar_t通常用於存儲UTF16(窗口)或UTF32(macosx)等其他操作。

這裏ConvertUTF.c/.H

unicode.org code

+0

我怎麼知道它是否需要UTF-8? –

+1

簡而言之,UTF8是對大多數語言的大多數字符/字母/符號等進行編碼的字符數組編碼方式之一。它可能是最受歡迎的。如果您正在調用某個庫定義的函數,請查看文檔以查看它期望的char *類型。許多流行的API希望char *爲UTF8。如果你知道你的wchar_t輸入只能是英文字符(ASCII碼32到127),那麼你可以使用上面提到的庫將wchar_t轉換爲char *,因爲這些字符在所有char *編碼方案中都是有效的。 – cppguy

相關問題