From 7fba4d27d927660956836969e25e667c7da59128 Mon Sep 17 00:00:00 2001 From: Arkadiusz Bulski Date: Mon, 12 Mar 2018 17:58:14 +0100 Subject: [PATCH] replaced struct.unpack with struct.Struct().unpack --- kaitaistruct.py | 58 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/kaitaistruct.py b/kaitaistruct.py index 0fb0aa7..73c1e12 100644 --- a/kaitaistruct.py +++ b/kaitaistruct.py @@ -1,5 +1,6 @@ import itertools import sys +import struct from struct import unpack from io import BytesIO # noqa @@ -99,95 +100,116 @@ def size(self): # Integer numbers # ======================================================================== + packer_s1 = struct.Struct('b') + packer_s2be = struct.Struct('>h') + packer_s4be = struct.Struct('>i') + packer_s8be = struct.Struct('>q') + packer_s2le = struct.Struct('H') + packer_u4be = struct.Struct('>I') + packer_u8be = struct.Struct('>Q') + packer_u2le = struct.Struct('h', self.read_bytes(2))[0] + return KaitaiStream.packer_s2be.unpack(self.read_bytes(2))[0] def read_s4be(self): - return unpack('>i', self.read_bytes(4))[0] + return KaitaiStream.packer_s4be.unpack(self.read_bytes(4))[0] def read_s8be(self): - return unpack('>q', self.read_bytes(8))[0] + return KaitaiStream.packer_s8be.unpack(self.read_bytes(8))[0] # ........................................................................ # Little-endian # ........................................................................ def read_s2le(self): - return unpack('H', self.read_bytes(2))[0] + return KaitaiStream.packer_u2be.unpack(self.read_bytes(2))[0] def read_u4be(self): - return unpack('>I', self.read_bytes(4))[0] + return KaitaiStream.packer_u4be.unpack(self.read_bytes(4))[0] def read_u8be(self): - return unpack('>Q', self.read_bytes(8))[0] + return KaitaiStream.packer_u8be.unpack(self.read_bytes(8))[0] # ........................................................................ # Little-endian # ........................................................................ def read_u2le(self): - return unpack('f') + packer_f8be = struct.Struct('>d') + packer_f4le = struct.Struct('f', self.read_bytes(4))[0] + return KaitaiStream.packer_f4be.unpack(self.read_bytes(4))[0] def read_f8be(self): - return unpack('>d', self.read_bytes(8))[0] + return KaitaiStream.packer_f8be.unpack(self.read_bytes(8))[0] # ........................................................................ # Little-endian # ........................................................................ def read_f4le(self): - return unpack('