CString转字节和字节转CByteArray-MFC
CString To Byte and Byte To CByteArray Conversion-MFC
我尝试在 MFC 中将 CString
转换为 BYTE*` 和 "BYTE* to CByteArray",根据您的建议,CString 已转换为 BYTE*。但我无法将整个字节 * 转换为 CByteArray It Returns 具有一些垃圾值的部分数据。
我在这里描述了我的实际问题...
代码:
CString csData =_T("someData");
BYTE *pByteArray = (PBYTE)(LPCTSTR)csData.GetBuffer();
CString str;
str=LPTSTR(pByteArray);
AfxMessageBox(str); //returns "someData"
CByteArray arrByte2;
arrByte2.SetSize(csData.GetLength()+1);
memcpy(arrByte2.GetData(), pByteArray, csData.GetLength()+1);
CString text((LPTSTR)arrByte2.GetData(),arrByte2.GetSize());
CStringA result(text);
AfxMessageBox(text);//returns "some﵄﷽ꮫꮫ"
问题出在这里:
str = (LPCSTR(pByteArray));
您将 pByteArray
转换为 LPCSTR
,实际上是 const char *
。但是当你的程序被编译为 UNICODE 程序时,CString
是一个宽字符的字符串(wChar_t
)并且 pByteArray
指向一个 wChar_t
的数组(宽字符,或者 16位字符)。用调试器查看pByteArray
指向的内存
所以pByteArray
指向的内存是这样的:
's', 0, 'o', 0, 'm', 0, etc.
|-----|
^ this is one wide char
并不像你想象的那样:
's', 'o', 'm', etc.
为了更正,您需要转换为 LPTSTR
(正如您在代码片段的第一部分所做的那样)而不是 LPCSTR
:
str = LPTSTR(pByteArray);
顺便说一句,表达式周围的额外 ()
不是必需的。
我尝试在 MFC 中将 CString
转换为 BYTE*` 和 "BYTE* to CByteArray",根据您的建议,CString 已转换为 BYTE*。但我无法将整个字节 * 转换为 CByteArray It Returns 具有一些垃圾值的部分数据。
我在这里描述了我的实际问题...
代码:
CString csData =_T("someData");
BYTE *pByteArray = (PBYTE)(LPCTSTR)csData.GetBuffer();
CString str;
str=LPTSTR(pByteArray);
AfxMessageBox(str); //returns "someData"
CByteArray arrByte2;
arrByte2.SetSize(csData.GetLength()+1);
memcpy(arrByte2.GetData(), pByteArray, csData.GetLength()+1);
CString text((LPTSTR)arrByte2.GetData(),arrByte2.GetSize());
CStringA result(text);
AfxMessageBox(text);//returns "some﵄﷽ꮫꮫ"
问题出在这里:
str = (LPCSTR(pByteArray));
您将 pByteArray
转换为 LPCSTR
,实际上是 const char *
。但是当你的程序被编译为 UNICODE 程序时,CString
是一个宽字符的字符串(wChar_t
)并且 pByteArray
指向一个 wChar_t
的数组(宽字符,或者 16位字符)。用调试器查看pByteArray
指向的内存
所以pByteArray
指向的内存是这样的:
's', 0, 'o', 0, 'm', 0, etc.
|-----|
^ this is one wide char
并不像你想象的那样:
's', 'o', 'm', etc.
为了更正,您需要转换为 LPTSTR
(正如您在代码片段的第一部分所做的那样)而不是 LPCSTR
:
str = LPTSTR(pByteArray);
顺便说一句,表达式周围的额外 ()
不是必需的。