如何解码包含浮点数数组的二进制文件?

问题描述 投票:0回答:1

encoded_floats_hex = [“35F1AC3D”,“610BB63D”,“8C25BF3D”,“B73FC83D”,“E259D13D”,“0E74DA3D”,“B5AB5C00”,“D3972400”,“6D9B2400”,“B5A82400”,“4A7 5E003”、“ED20E403 ”、“11D7F803”、“0F7EEF03”、“BAD41500”、“56341200”、“6B5C1200”、“BE753200”、“E94B3E00”、“EA4D3600”、“BE372E00”、“6BDC1500”、“56FC1200”、“B9D4130” 0”, “E9CC7200”、“D6347E00”、“BB547600”、“6E7C6E00”、“5A541600”、“B94B1200”、“EECD1300”、“DBD73200”、“B7FD3D00”、“6ADC3600”、“59342E00”、“B64C1600”、 “EA541200 ”、“DF741200”、“9281F000”、“FC39F600”、“5B0EFC00”、“3254F600”、“FB7B0B00”、“EDEE0E00”、“D71D0900”、“3D2A1900”、“2C261900”、“573A1B00”、“7D2A17” 00”, “6B1E0B00”、“55EA0E00”、“3C660900”、“2BE63900”、“D56B3900”、“FF1E3B00”、“D52D3700”、“D43A0B00”、“3F260F00”、“552A0900”、“6B1A1900”、“7D6E1” 900","54FA1A00 ”、“2C661700”、“3DE60B00”、“D71B0F00”、“ED2E0900”、“FB3D7900”、“D42A7900”、“2D267900”、“3B1A7700”、“55EA0B00”、“6F7E0F00”、“74EA0A00”、“55661 900”, “2F261900”、“352A1900”、“DB3E1700”、“EC2D0B00”、“F51A0F00”、“DBE70A00”、“2D6A3900”、“37FA3900”、“5C6E3900”、“6C1A3700”、“77260B00”、“5D260F” 00","2B3A0B00 ”、“352E1900”、“DC1D1900”、“EB6A1900”、“F5E71600”、“DF7A0B00”、“35EA0F00”、“341E0B00”]

此数组包含小端上 float 4 字节的十六进制值,第一个值可以解码为:

35 F1 AC 3D = 0.08444444

61 0B B6 3D = 0.08888889

8C 25 BF 3D = 0.09333333

B7 3F C8 3D = 0.09777778

E2 59 D1 3D = 0.1022222

0E 74 DA 3D = 0.1066667

其他似乎是通过一些自定义增量编码进行编码的。

另一方面,所有数组都由 0 到 1 之间的数字组成,并且除了最后一个值之外,从 0.0 增加到 1.0。

知道如何解码吗?

我尝试了几种解码,但没有一个给出预期的结果。

python arrays decoding binary-data
1个回答
0
投票

小端上浮点 4 字节的十六进制值

我们重点关注这部分。

文件本身的读取很简单,因此我们假设它已经作为此类十六进制字符串的列表读入内存。

由于您的订单是小端字节序,因此可以通过反转 bytes.fromhex 结果来从字符串中解码字节:

byte_out = bytes.fromhex("35F1AC3D")[::-1] 

然后我们需要做的就是将字节解压为目标格式数据(例如,此处为 float,因为您的字符串只有 4 个字节):

float_out = struct.unpack('<f', byte_out)[0]

只需对每个元素执行操作即可。

© www.soinside.com 2019 - 2024. All rights reserved.