奇怪的十六进制格式

时间:2014-01-22 16:47:35

标签: c++ c file-io hex decimal

以下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个字节,以便使用正确的十六进制进行处理,然后使用类似的整数/长整数?

2 个答案:

答案 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位转换定义的。