memcpy只复制c ++上的一个字节

时间:2014-04-19 04:04:22

标签: c++ windows memory bytearray tchar

我尝试使用memcpy将TCHAR数组转换为BYTE数组,但memcpy函数只将1 TCHAR从tchar数组复制到字节数组中。

我不知道为什么会这样。

以下是代码段。

TCHAR test[] = L"This is a test string, its purpose is to do some testing!";
DWORD testSizeBytes = sizeof(TCHAR) * lstrlen(test);
LPBYTE byteArray = new BYTE[testSizeBytes+1];
memcpy(byteArray,test,testSizeBytes);

如果我使用此代码段,则byteArray将只包含' T';

任何帮助都将不胜感激。

编辑:我解决了这个问题(这是一个错字)。我在这里写的代码完美无瑕。我的编译器在Windows VM中,所以我不得不在这里重新键入它,并在不知不觉中修复了错字。

2 个答案:

答案 0 :(得分:3)

TCHAR test[] = L"This is a test string, its purpose is to do some testing!";

这是一个宽字符(wchar_t)字符串。在Windows上,定义了UNICODE,即UTF-16。在UTF-16中,字符'T'是2个字节。第一个字节对应于'T'的ASCII值(十进制84)。第二个字节是0.所以当你将它复制到你的字节数组时,它看起来像一个带有1个字符的空终止c字符串。其他字符在那里,但是它们出现在明显的c-string结尾之后,所以你的调试器显然忽略了它们。

答案 1 :(得分:0)

正如ajshort的评论所提到的那样,你的调试器可能没有意识到你正在处理一个数组。

如果您可以使用调试器查看内存,请尝试查看内存位置byteArray + 1byteArray + 2等。

我不在Windows上,所以我不能告诉你如何做到这一点,但等效的gdb命令将是x byteArray + 1