Как получить несколько 32-битных значений с байтовым массивом? - PullRequest
0 голосов
/ 09 октября 2018

Мне нужно извлечь некоторые числовые значения из потока двоичных данных.код ниже работает для меня, но наверняка есть более подходящий способ сделать это в 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 голосов
/ 10 октября 2018

Ваш вопрос и сопровождающий его псевдокод, на мой взгляд, несколько туманны, но здесь есть кое-что, что использует кусочки 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
...