首页 > 解决方案 > 如何使用字节数组获取多个 32 位值?

问题描述

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

标签: pythonarraysbyteslice

解决方案


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

推荐阅读