如何解码以十六进制存储的未知编码编码的一组值

How to decode a set of values encoded in an unknown encoding stored as hex

我正在使用的软件将一组浮点数编码为十六进制字符串。

8e 3c 86 71 b8 25 ac bf 01 ab bc c4 08 69 aa ad 3f 01 a3 78 60 8c c6 fd c5 3f 01

我知道精确到小数点后两位的数值。

-.05, .06, .17

我将如何着手找出编码?

这是 IEEE 754 浮点,双精度 (see here), little endian (see here),由 01 字节分隔,可能是数据类型的一些专有指示符。

第 1 步:提取 8 字节的单词

8e 3c 86 71 b8 25 ac bf
ab bc c4 08 69 aa ad 3f
a3 78 60 8c c6 fd c5 3f

第 2 步:可选择从小端恢复为大端,具体取决于您要使用的转换器

bf ac 25 b8 71 86 3c 8e
3f ad aa 69 08 c4 bc ab
3f c5 fd c6 8c 60 78 a3

第 3 步:将二进制 double 格式转换为人类可读的十进制格式,此处用于使用在线服务手动完成的测试baseconvert.com(64 位十六进制输入)

-0.05497528444095066413321859499774291180074214935302734375
0.057940752334951405033702798164085834287106990814208984375
0.1718071160730164359531357831656350754201412200927734375

如何解码未知格式:

在这种情况下,我知道有三个浮点数。我数了一下字节,看到有27个,可以被3整除。所以我把字节拆分成9个字节的字,看到有8个字节后面跟着01的模式。 8 字节二进制浮点数是众所周知的,所以我检查了样本是否符合标准。嗯,确实如此。

如果你只是看了数据还没有头绪:

  1. 检查编码文件是否有众所周知的魔术饼干
  2. 如果可能,将输入更改为简单值,例如 0、1 或 2,然后观察软件如何处理它。
  3. 寻找通常用于此类数据的标准编码、压缩方法或加密。
  4. 尽可能多地收集有关软件的信息。
  5. 尝试使用适当的工具重新设计软件。