【问题标题】:How to get multiple 32bit values with byte array?如何使用字节数组获取多个 32 位值?
【发布时间】:2018-10-09 20:11:07
【问题描述】:

我需要从二进制数据流中提取一些数值。 下面的代码对我有用,但可以肯定的是,在 python 中有更合适的方法可以做到这一点。特别是我一直在努力寻找一种更好的方法来迭代数组并从缓冲区中获取 4 个字节作为字节数组。

给我一​​些提示?

outfile = io.BytesIO()
outfile.writelines(some binary data stream)
buf = outfile.getvalue()

blen = int(len(buf) / 4 );

for i in range(blen):
   a = bytearray([0,0,0,0])

   a[0] = buf[i*4]
   a[1] = buf[i*4+1]
   a[2] = buf[i*4+2]
   a[3] = buf[i*4+3]
   data = struct.unpack('<l', a)[0]
   do something with data

【问题讨论】:

    标签: python arrays byte slice


    【解决方案1】:

    在我看来,您的问题和随附的伪代码有些模糊,但这里有一些使用 buf 的切片来获取所需的每组 4 个字节的东西——所以如果没有别的,它至少更简洁一点(假设我已经正确解释了您的要求):

    import io
    import struct
    
    outfile = io.BytesIO()
    outfile.writelines([b'\x00\x01\x02\x03',
                        b'\x04\x05\x06\x07'])
    buf = outfile.getvalue()
    
    for i in range(0, len(buf), 4):
       data = struct.unpack('<l', buf[i:i+4])[0]
       print(hex(data))
    

    输出:

    0x3020100
    0x7060504
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2022-01-25
      相关资源
      最近更新 更多