【发布时间】:2016-05-10 12:54:24
【问题描述】:
我在使用memcpy时遇到以下问题:
假设一个十六进制数据必须以二进制复制,例如:203800000E820006,然后应用以下指令:
unsigned char buffer[8];
memcpy(buffer,"\x20\x38\x00\x00\x0E\x82\x00\x06",8);
但是,当我以二进制形式写入数据时,它只以二进制形式打印前 2 个字节,因为 \x00 被解释为字符串终止符。如何避免或解决此问题,以便以 8 字符二进制格式表示 16 字符字符串?
【问题讨论】:
-
“只出现”是什么意思?!出现在哪里?另外,为什么是“+1”?这是 8 个字节的数据,对吧?
-
您的代码很好,您的
buffer数组最终应该正好包含您想要的 8 个字节。为什么说“它只出现在前 2 个字节”?你在做printf("%s", buffer)还是什么?这是有道理的,因为%s需要一个以空字符结尾的字符串,所以它在看到一个字符串时就停止了。但是其余的数据都在那里(只是没有打印出来)。 -
@TinoReyna 这不是一个字符串。请不要称它为字符串。如果你打印它,你必须使用知道如何打印 8 字节二进制数据的代码。你在用这样的代码吗?
-
我认为您的问题是您不清楚包含十六进制数据的字符串的含义。如果你想要字符串
"203800000E820006",那么就这样写。 (当然,这是 16 个字节,而不是 8 个字节。)如果您想要一个包含值 0x20、0x38、...、0x00、0x06 的 8 字节数组,这就是您的代码成功创建的内容,但该 8 字节数组是不是字符串,你不能用%sprintf它,你不能用strcpy复制它,等等。 -
@TinoReyna:我说我认为您不应该将其格式化为字符串(因为它不是字符串),但我不建议使用整数数组。
unsigned char的数组很好。您可以将 8 字节整数存储到unsigned char数组的单元格中。
标签: c string binary char memcpy