2013-01-18 139 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

试着用铸造,再次丢失数据,收到大约一半的数据 –