二进制文件读取:有没有简单方法按规则解码二进制

2021-01-11 18:56:45 +08:00
 leiuu

假设有二进制文件 a.bin ,前 10 个字节如下(使用 16 进制显示,原始数据使用小端模式):

39 00 00 00 12 3F 6F 5A A7 04

希望这样读取:

  1. 39 00 00 00 -> 第 1-4 个字节转为 int , 0x00000039 = 57

  2. 12 3F -> 5-6 个字节转为 int , 0x3F12 = 16146

  3. 6F 5A A7 04 -> 7-10 个字节转为 int , 0x045AA76F = 73049967

文件剩余部分也是这个格式,希望可以每 10 个字节,输出一行数据,每行 3 个数,并用空格间隔。

现在的处理方法: input:

echo $(od -An -t dI -j 0 -N 4 a.bin  &&  od -An -t dI -j 4 -N 2 a.bin && od -An -t dI -j 6 -N 4 a.bin)

output:

57 16146 78076527

有些麻烦,有没有更好的方法呢。

1593 次点击
所在节点    程序员
5 条回复
crclz
2021-01-11 19:34:03 +08:00
skinny
2021-01-11 19:38:00 +08:00
struct.unpack
msg7086
2021-01-12 02:24:37 +08:00
遇事不决 unpack,很多语言里都有的工具。
faketemp
2021-01-12 07:09:36 +08:00
leiuu
2021-01-12 10:15:07 +08:00
@crclz 谢谢 老哥 代码简单清晰 学到了 ~

@skinny
@msg7086
@faketemp
unpack 精确的解决了我对这个概念的盲点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/743959

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX