我有一个大小为2的字节数组,它包含一个来自Basic Multilingual Plane的UTF-16LE编码Unicode字符。
BYTE b[2];
memset(b,0,2);
b[0] = 0x31;
b[1] = 0x00; //In future this byte contain info when unicode use , but now 0x00.
现在我想将其存储在CString
或TCHAR
。
修改
我确实使用了
TCHAR tch = (TCHAR)b; //tch = 'X'
这怎么可能?
答案 0 :(得分:4)
你似乎在说你的BYTE[2]
数组包含一个以UTF-16(或UCS-2表示 - 它们与基本平面等效)的Unicode代码点(来自基本平面)。在这种情况下,您可以通过这种方式构建一个单字符CString
:
CStringW s((wchar_t*)b, 1);
或
CStringW s((wchar_t&)b);
目前尚不清楚为何开始使用BYTE[2]
而不是wchar_t
或WCHAR
。
答案 1 :(得分:0)
简单地:
BYTE recv_buffer[1024];
CString str_recv(recv_buffer);
答案 2 :(得分:-1)
我无法使上面建议的施法方法起作用(2016年的VS 2015)。这是我从已故的Scott McPhillips那里学到的一种技术,他真正了解MFC:
CString str;
LPWSTR strBuf = str.GetBufferSetLength( 4 ); // your b two bytes plus unicode trailing null
::memset( strBuf, 0, 4 ); // make sure the trailing bytes are null
::memcpy_s( strBuf, 2, b, 2 ); // copy over your byte bytes
str.ReleaseBuffer();