memcpy只在c++上复制一个字节
memcpy only copying one byte over c++
我正试图使用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);
如果我使用这个片段,字节数组将只包含"T";
如有任何帮助,我们将不胜感激。
编辑:我解决了这个问题(这是一个打字错误)。我在这里写的代码工作得很完美。我的编译器在windows虚拟机中,所以我不得不在这里重新键入它,并在不知不觉中修复了拼写错误。
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。因此,当您将其复制到字节数组时,它看起来像是一个以null结尾、包含1个字符的c字符串。其他字符在那里,但它们出现在明显的c字符串的末尾,所以调试器显然忽略了它们。
如果您可以使用调试器查看内存,请尝试查看内存位置byteArray + 1
和byteArray + 2
等。
我不在Windows上,所以我不能告诉你如何执行,但等效的gdb
命令是x byteArray + 1
。
相关文章:
- 程序错误地读取了二进制文件的一个字节
- 解压缩串联的 zlib 流而不读取下一个字节
- 一次读取一个字节的 unicode
- 如何从 int 一次写入一个字节的文件?C++
- 如何将一个字节数组正确地恢复为C 中的对象
- 我正在尝试修改一个字节数组并通过 JNI 将其从 c++ 发送到 java
- 快速简单的方法,以C++为单位一次读取一个字节的 stdin
- 如何编写一个字节表示为c 中的文件
- 两个 4 位位字段加起来不等于一个字节的大小 - 如何修复?
- GCC 编译器一个字节中有多少位
- 处理Huffman压缩/减压中的最后一个字节
- 如何在-120到120之间更改int到char(或其他简单保存为一个字节的简单方法)
- Winapi WriteFile 函数写入一个字节
- C RLE BMP压缩跳过了最后一个字节
- mbtowc在osx上总是返回一个字节
- C 将一个字节与字母进行比较
- 有可能在c++中创建一个占用不到一个字节内存的类型吗
- Qt串行端口有时会丢失最后一个字节
- (C++)ReadProcessMemory-读取一个字节时出现问题
- 将一个字节数组从Unity C#传递到C++库方法中