2013-01-18 175 views
2

我知道這是一個簡單的問題,但我嘗試了很多方法,在所有這些方法中,我丟失了數據,文本數據,而不是那些在每個字節之後跟蹤0的方法。C++將unicode CString或wchar_t轉換爲LPBYTE

我將CString轉換爲wchar_t使用GetBuffer(0),仍然沒有運氣。我無法得到一個合適的LPBYTE

最後我需要它是const LPBYTE,但我認爲通過簡單的鑄造LPBYTE我可以得到const LPBYTE

所以你能幫我把CStringwchar_t轉換成LPBYTE數組嗎?

感謝

+0

也許嘗試CT2CA宏? – Smash

+0

它是UNIDOCDE還是ANSI項目? –

+0

Unicode項目 –

回答

2

如果你想「看到」 CString爲​​是一個簡單的「原始」序列(陣列)的內容,你可以使用CString::GetString()方法得到的指針到第一CString字符,然後轉換爲const BYTE*

CString str; 
.... 
const BYTE* pb = reinterpret_cast<const BYTE*>(str.GetString()); 

如果你想「看」的單一wchar_t爲​​的順序,你可以把它的地址並重新轉換爲const BYTE*

wchar_t wch; 
.... 
const BYTE* pb = reinterpret_cast<const BYTE*>(&wch); 

但是,如果你想從Unicode UTF-16轉換爲像UTF-8編碼的另一個,你可能需要使用一些conversion helpers like CW2A

CString strUtf16; // Assume UNICODE builds (the default since VS2005) 
.... 
// Convert from UTF-16 to UTF-8 
CW2A strUtf8(strUtf16, CP_UTF8); 

// Convert (cast) to const BYTE* 
const BYTE* pb = reinterpret_cast<const BYTE*>(static_cast<const char*>(strUtf8)); 
+0

無法將參數1從'const LPBYTE *'轉換爲'const LPBYTE',我需要const LPBYTE –

+0

如果您是初學者,LPBYTE可能會引起混淆;然而,它只是意味着'BYTE *'。請注意,爲清楚起見,我在代碼中使用了'BYTE',並帶有_explicit_指針(即'const BYTE *',而不是'const LPBYTE *')。 –

+0

試着用鑄造,再次丟失數據,收到大約一半的數據 –