2011-09-03 24 views
2

我目前使用iconv來轉換具有不同編碼的文檔。在保持代碼正確性的同時使用iconv

iconv()函數的原型如下:

size_t iconv (
    iconv_t cd, 
    const char* * inbuf, 
    size_t * inbytesleft, 
    char* * outbuf, 
    size_t * outbytesleft 
); 

到目前爲止,我只需要轉換char*類型的緩衝器,但我也意識到我必須轉換wchar_t*類型的緩衝區。實際上,iconv甚至有一個專用編碼名稱"wchar_t"用於這樣的緩衝區:此編碼適合操作系統設置:即,在我的計算機上,它指的是Windows上的UCS-2和Linux上的UTF-32。

但是,這裏存在的問題:如果我有wchar_t*緩衝區我可以reinterpret_castchar*一個緩衝區iconv使用它,但我面對的實現定義的行爲:我不能肯定的是,所有的編譯器的行爲關於演員也是如此。

我應該在這裏做什麼?

+0

事實上,如果你想在mbstowcs()之後得到的未指定的「系統編碼」和一個確定的編碼之間進行轉換,WCHAR編碼是至關重要的...... –

回答

3

reinterpret_cast<char const*>是安全的,沒有實現定義,至少沒有任何實際的實現。

該語言顯式允許任何對象被重新解釋爲一個字符數組,並且您獲得該字符數組的方式是使用reinterpret_cast

+0

謝謝你清除我的想法。我認爲轉換'char *'應該足夠安全,但我需要確保這一點。 – ereOn

相關問題