无法将CString转换为BYTE数组

时间:2010-03-17 07:47:59

标签: c++ bytearray cstring

我需要将CString转换为BYTE数组。我不知道为什么,但我在互联网上找到的一切都不起作用:( 例如,我有

CString str = _T("string");

我一直在努力 1)

BYTE *pbBuffer = (BYTE*)(LPCTSTR)str;

2)

BYTE *pbBuffer = new BYTE[str.GetLength()+1];
memcpy(pbBuffer, (VOID*)(LPCTSTR)StrRegID, str.GetLength());

3)

BYTE *pbBuffer = (BYTE*)str.GetString();

始终 pbBuffer 只包含 str 的第一个字母

DWORD dwBufferLen = strlen((char *)pbBuffer)+1;

是2

但是如果我使用const string:

BYTE *pbBuffer = (BYTE*)"string";

pbBuffer 包含整个字符串

我的错误在哪里?

2 个答案:

答案 0 :(得分:2)

您的CString是Unicode(每个字符两个字节),您尝试将其解释为ANSI(每个字符一个字节)。这会导致您不期望的结果。

您需要转换数据,而不是将基础缓冲区转换为char*。请使用WideCharToMultiByte()

答案 1 :(得分:1)

您可能正在使用unicode进行编译。这意味着您的CString包含wchar_t而不是char。将wchar_t指针转换为char指针会导致您将第一个wchar_t的第二个字节解释为字符串终止符(因为对于最常见的字符,它是0)

使用visual studio时,应始终使用_T()声明字符串文字,将TCHAR声明为字符类型。在你的情况下:

BYTE* pBuffer = (BYTE*)(LPCTSTR)str;

你得到缓冲区,但每隔一个字节很可能为零。

如果需要ANSI字符串,请使用CStringA。 (但是在初始化时跳过_T())