在c中使用memcpy复制二进制数据

标签 c string binary char memcpy

我在使用memcpy时遇到以下问题:

假设需要以二进制方式复制一个十六进制数据,例如:203800000E820006,则应用以下指令:

unsigned char buffer[8];
memcpy(buffer,"\x20\x38\x00\x00\x0E\x82\x00\x06",8);

但是,当我以二进制形式写入数据时,它仅以二进制形式打印前 2 个字节,因为\x00 被解释为字符串终止符。如何避免或修复此问题,以便以 8 字符二进制格式表示 16 字符字符串?

最佳答案

您拥有的缓冲区不是字符串。您不能通过将其传递给需要字符串的函数来对待它,例如 strcatstrcpystrcmp printf 的 %s 格式说明符。

您有一个字符数组,因此按如下方式打印它们:

int i;
for (i=0;i<sizeof(buffer);i++) {
    printf("%02hhX ", buffer[i]);
}
printf("\n");

关于在c中使用memcpy复制二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35141266/

相关文章:

c++ - glGetShaderInfoLog 到 std::string?

python - 如何在 Python 中将一串位转换为十六进制字符串?

linux - 防止 objdump 截断十六进制输出

c - 降级后 GCC 无法编译简单的 C 应用程序

c - 使用 %s(即字符串说明符)读取 char 数组

c - 字符串段错误问题

c# - 为什么 File.ReadAllBytes 结果与使用 File.ReadAllText 时不同?

ios - 我如何向量化这个 for 循环?

c++ - 通过更改窗口大小获得不同的标题大小

java - java - 如何将大型二进制字符串转换为字节数组java?