在vc ++中将Unicode字节数组转换为CString

时间:2013-10-04 14:30:04

标签: visual-c++ unicode mfc

我有一个大小为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.

现在我想将其存储在CStringTCHAR

修改

我确实使用了

TCHAR tch = (TCHAR)b;  //tch = 'X'

这怎么可能?

3 个答案:

答案 0 :(得分:4)

你似乎在说你的BYTE[2]数组包含一个以UTF-16(或UCS-2表示 - 它们与基本平面等效)的Unicode代码点(来自基本平面)。在这种情况下,您可以通过这种方式构建一个单字符CString

CStringW s((wchar_t*)b, 1);

CStringW s((wchar_t&)b);

目前尚不清楚为何开始使用BYTE[2]而不是wchar_tWCHAR

答案 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();