简体   繁体   中英

parse binary format with python

I have a binary file with the following header: 4 byte string, 1 byte number then 4 byte uint32 number.

Do I understand this correctly? The sbet_data[0:3] is the string, sbet_data[4:5] is the 1 byte number, then how long is the 4 byte uint32 number? Where can I find a good chart for corresponding byte size vs format, for example I would also like to know the size for 8 byte (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])

You need to open your file in binary mode and read only 12 bytes from your file:

import struct

with open('abc.dat', 'rb') as fobj:
    byte_string, n1, n4 = struct.unpack('4sbI', fobj.read(12)) 

You will get a byte string. Assuming it is ASCII, you can decode like this:

my_string = byte_string.decode('ascii')

The documentation of the struct contains tables of format strings . According to one of these tables a uint64 would be L .

I believe you are trying to extract information from the binary. Well this will work

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]

In this case unpacked_data[0] will be the string, unpacked_data[1] will be the 1 byte number and the 4 byte integer will be unpacked_data[2] .

Keep in mind you can also use numpy to unpack the data using the np.ndarray constructor if you would like to improve the speed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM