2016-07-08 3 views
1

У меня есть двоичный файл со следующим заголовком: 4 байтовая строка, 1 байт, а затем 4 байта uint32.parse двоичный формат с python

Правильно ли я это понимаю? 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]) 

ответ

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, если хотите улучшить скорость.

4

Вам нужно открыть файл в двоичном режиме и только для чтения 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.

+0

Это работает для вас? –

Смежные вопросы