以下hexdump显示我手上的设备所产生的一些数据。它以奇怪的方式为我存储年,月,日,小时,分钟,秒和长度(相反顺序为单个数字4字节标记)。
de 07 00 00 01 00 00 00 16 00 00 00 10 00 00 00
24 00 00 00 1d 00 00 00 15 00 00 00 X X X X
例如: 年份标记为“000007de”,即0x07de(= 2014)。现在;我遇到的问题是如何在c / c ++中正确处理这个问题。 (前4个字节)
如何使用“反向”顺序读取这4个字节,以便使用正确的十六进制进行处理,然后使用类似的整数/长整数?
答案 0 :(得分:1)
如果您在生成的同一架构上将值读作int
,那么您无需执行任何操作,因为这是系统的自然格式。
如果您想在不同的架构上使用不同的二进制格式读取它,您只需要对此做些什么。
所以你可以用
简单地阅读 int32_t n;
fread(&n, sizeof int32_t, 1, FILE);
当然,文件必须以二进制模式打开,你需要一个32位的int。
答案 1 :(得分:0)
如果按相反顺序阅读,则可以使用以下内容更改字节序:
uint32_t before = 0xde070000;
uint32_t after = ((before<<24) & 0xff000000) |
((before<<8) & 0xff0000) |
((before>>8) & 0xff00) |
((before>>24) & 0xff);
编辑:正如注释中所指出的,这只是为无符号32位转换定义的。