V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leiuu
V2EX  ›  程序员

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

  •  
  •   leiuu · 2021-01-11 18:56:45 +08:00 · 1578 次点击
    这是一个创建于 1172 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设有二进制文件 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
    

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

    5 条回复    2021-01-12 10:15:07 +08:00
    crclz
        1
    crclz  
       2021-01-11 19:34:03 +08:00
    skinny
        2
    skinny  
       2021-01-11 19:38:00 +08:00   ❤️ 1
    struct.unpack
    msg7086
        3
    msg7086  
       2021-01-12 02:24:37 +08:00 via Android
    遇事不决 unpack,很多语言里都有的工具。
    leiuu
        5
    leiuu  
    OP
       2021-01-12 10:15:07 +08:00
    @crclz 谢谢 老哥 代码简单清晰 学到了 ~

    @skinny
    @msg7086
    @faketemp
    unpack 精确的解决了我对这个概念的盲点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3099 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:34 · PVG 22:34 · LAX 07:34 · JFK 10:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.