我尝试使用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中,所以我不得不在这里重新键入它,并在不知不觉中修复了错字。答案 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 + 1
和byteArray + 2
等。
我不在Windows上,所以我不能告诉你如何做到这一点,但等效的gdb
命令将是x byteArray + 1
。