Skip to content

Commit 7fba4d2

Browse files
committed
replaced struct.unpack with struct.Struct().unpack
1 parent 073f2a8 commit 7fba4d2

File tree

1 file changed

+40
-18
lines changed

1 file changed

+40
-18
lines changed

kaitaistruct.py

+40-18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import itertools
22
import sys
3+
import struct
34
from struct import unpack
45
from io import BytesIO # noqa
56

@@ -99,95 +100,116 @@ def size(self):
99100
# Integer numbers
100101
# ========================================================================
101102

103+
packer_s1 = struct.Struct('b')
104+
packer_s2be = struct.Struct('>h')
105+
packer_s4be = struct.Struct('>i')
106+
packer_s8be = struct.Struct('>q')
107+
packer_s2le = struct.Struct('<h')
108+
packer_s4le = struct.Struct('<i')
109+
packer_s8le = struct.Struct('<q')
110+
111+
packer_u1 = struct.Struct('B')
112+
packer_u2be = struct.Struct('>H')
113+
packer_u4be = struct.Struct('>I')
114+
packer_u8be = struct.Struct('>Q')
115+
packer_u2le = struct.Struct('<H')
116+
packer_u4le = struct.Struct('<I')
117+
packer_u8le = struct.Struct('<Q')
118+
102119
# ------------------------------------------------------------------------
103120
# Signed
104121
# ------------------------------------------------------------------------
105122

106123
def read_s1(self):
107-
return unpack('b', self.read_bytes(1))[0]
124+
return KaitaiStream.packer_s1.unpack(self.read_bytes(1))[0]
108125

109126
# ........................................................................
110127
# Big-endian
111128
# ........................................................................
112129

113130
def read_s2be(self):
114-
return unpack('>h', self.read_bytes(2))[0]
131+
return KaitaiStream.packer_s2be.unpack(self.read_bytes(2))[0]
115132

116133
def read_s4be(self):
117-
return unpack('>i', self.read_bytes(4))[0]
134+
return KaitaiStream.packer_s4be.unpack(self.read_bytes(4))[0]
118135

119136
def read_s8be(self):
120-
return unpack('>q', self.read_bytes(8))[0]
137+
return KaitaiStream.packer_s8be.unpack(self.read_bytes(8))[0]
121138

122139
# ........................................................................
123140
# Little-endian
124141
# ........................................................................
125142

126143
def read_s2le(self):
127-
return unpack('<h', self.read_bytes(2))[0]
144+
return KaitaiStream.packer_s2le.unpack(self.read_bytes(2))[0]
128145

129146
def read_s4le(self):
130-
return unpack('<i', self.read_bytes(4))[0]
147+
return KaitaiStream.packer_s4le.unpack(self.read_bytes(4))[0]
131148

132149
def read_s8le(self):
133-
return unpack('<q', self.read_bytes(8))[0]
150+
return KaitaiStream.packer_s8le.unpack(self.read_bytes(8))[0]
134151

135152
# ------------------------------------------------------------------------
136153
# Unsigned
137154
# ------------------------------------------------------------------------
138155

139156
def read_u1(self):
140-
return unpack('B', self.read_bytes(1))[0]
157+
return KaitaiStream.packer_u1.unpack(self.read_bytes(1))[0]
141158

142159
# ........................................................................
143160
# Big-endian
144161
# ........................................................................
145162

146163
def read_u2be(self):
147-
return unpack('>H', self.read_bytes(2))[0]
164+
return KaitaiStream.packer_u2be.unpack(self.read_bytes(2))[0]
148165

149166
def read_u4be(self):
150-
return unpack('>I', self.read_bytes(4))[0]
167+
return KaitaiStream.packer_u4be.unpack(self.read_bytes(4))[0]
151168

152169
def read_u8be(self):
153-
return unpack('>Q', self.read_bytes(8))[0]
170+
return KaitaiStream.packer_u8be.unpack(self.read_bytes(8))[0]
154171

155172
# ........................................................................
156173
# Little-endian
157174
# ........................................................................
158175

159176
def read_u2le(self):
160-
return unpack('<H', self.read_bytes(2))[0]
177+
return KaitaiStream.packer_u2le.unpack(self.read_bytes(2))[0]
161178

162179
def read_u4le(self):
163-
return unpack('<I', self.read_bytes(4))[0]
180+
return KaitaiStream.packer_u4le.unpack(self.read_bytes(4))[0]
164181

165182
def read_u8le(self):
166-
return unpack('<Q', self.read_bytes(8))[0]
183+
return KaitaiStream.packer_u8le.unpack(self.read_bytes(8))[0]
167184

168185
# ========================================================================
169186
# Floating point numbers
170187
# ========================================================================
171188

189+
packer_f4be = struct.Struct('>f')
190+
packer_f8be = struct.Struct('>d')
191+
packer_f4le = struct.Struct('<f')
192+
packer_f8le = struct.Struct('<d')
193+
172194
# ........................................................................
173195
# Big-endian
174196
# ........................................................................
175197

176198
def read_f4be(self):
177-
return unpack('>f', self.read_bytes(4))[0]
199+
return KaitaiStream.packer_f4be.unpack(self.read_bytes(4))[0]
178200

179201
def read_f8be(self):
180-
return unpack('>d', self.read_bytes(8))[0]
202+
return KaitaiStream.packer_f8be.unpack(self.read_bytes(8))[0]
181203

182204
# ........................................................................
183205
# Little-endian
184206
# ........................................................................
185207

186208
def read_f4le(self):
187-
return unpack('<f', self.read_bytes(4))[0]
209+
return KaitaiStream.packer_f4le.unpack(self.read_bytes(4))[0]
188210

189211
def read_f8le(self):
190-
return unpack('<d', self.read_bytes(8))[0]
212+
return KaitaiStream.packer_f8le.unpack(self.read_bytes(8))[0]
191213

192214
# ========================================================================
193215
# Unaligned bit values

0 commit comments

Comments
 (0)