c++ - memcpy 仅通过 C++ 复制一个字节

标签 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 中,因此我不得不在此处重新键入它并在不知不觉中修复了拼写错误。

最佳答案

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 字符串末尾之后,因此您的调试器显然忽略了它们。

关于c++ - memcpy 仅通过 C++ 复制一个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23165657/

相关文章:

c++ - 将文件映射到 RAM 的最佳方法?

c++ - 调试器已附加 - cscript

windows - 升级到 Windows 10,现在 WAMP 无法工作

windows - 如果文本文件以数组中的任何字符串开头,则打印该行

php - Codeigniter 优化/加载模型的最佳位置是?

计算地址 : pointer + non-negative number

c++ - (右值引用)VS(const 左值引用)作为 C++11 中的函数参数

c++ - 共享库未在函数中链接

c++ - 与 Mathematica 相比,C++ 中的 float 学舍入很奇怪

c++ - 本土工作队列与英特尔 TBB