【问题标题】:parse binary format with python用python解析二进制格式
【发布时间】:2016-11-10 14:22:56
【问题描述】:

我有一个带有以下标头的二进制文件:4 字节字符串,1 字节数字,然后 4 字节 uint32 数字。

我理解正确吗? sbet_data[0:3] 是字符串,sbet_data[4:5] 是 1 字节的数字,那么 4 字节的 uint32 数字是多长?在哪里可以找到对应字节大小与格式的好图表,例如我还想知道 8 字节 (uint64) 的大小。

sbet_file = open('abc.dat')
sbet_data = sbet_file.read()

s = struct.Struct('4s b I')
unpacked_data = s.unpack(sbet_data[0:12])

【问题讨论】:

    标签: python python-3.x binary


    【解决方案1】:

    您需要以二进制模式打开文件并从文件中仅读取 12 个字节:

    import struct
    
    with open('abc.dat', 'rb') as fobj:
        byte_string, n1, n4 = struct.unpack('4sbI', fobj.read(12)) 
    

    你会得到一个字节串。假设它是ASCII,你可以这样解码:

    my_string = byte_string.decode('ascii')
    

    struct 的文档包含tables of format strings。 根据其中一张表,uint64 将是 L

    【讨论】:

      【解决方案2】:

      我相信您正在尝试从二进制文件中提取信息。好吧,这会工作

      import struct 
      import numpy as np
      
      buffer = np.random.bytes(12)
      s = struct.Struct('4sbI')
      unpacked_data = s.unpack(buffer)
      print unpacked_data[0], unpacked_data[1], unpacked_data[2]
      

      在这种情况下,unpacked_data[0] 是字符串,unpacked_data[1] 是 1 字节数字,4 字节整数是 unpacked_data[2]

      请记住,如果您想提高速度,也可以使用 numpy 使用 np.ndarray 构造函数解包数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-12
        • 2018-08-14
        • 1970-01-01
        • 2023-03-31
        • 2021-12-14
        • 2016-04-07
        • 2012-04-02
        相关资源
        最近更新 更多