如何使用字节数组获取多个32bit值?

时间:2018-10-09 20:11:08

标签: python arrays byte slice

我需要从二进制数据流中提取一些数字值。 下面的代码为我工作,但可以肯定的是,在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

1 个答案:

答案 0 :(得分:0)

在我看来,您的问题和随附的伪代码有些模糊,但是这里有些东西使用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