1

我正在尝试使用 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 虚拟机中,所以我不得不在这里重新输入它并在不知不觉中修复了错字。

4

2 回答 2

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'(十进制 84)的 ASCII 值。第二个字节是 0。因此,当您将其复制到字节数组时,它看起来像一个以空值结尾的带有 1 个字符的 c 字符串。其他字符在那里,但它们出现在明显的 c 字符串的结尾之后,所以你的调试器显然忽略了它们。

于 2014-04-19T04:27:56.310 回答
0

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

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

我不在 Windows 上,所以我不能告诉你怎么做,但等效的gdb命令是x byteArray + 1.

于 2014-04-19T04:24:08.027 回答