Skip to content

Commit c5ff9a1

Browse files
committed
Add method read_bits_int_le
See kaitai-io/kaitai_struct#155
1 parent b54805c commit c5ff9a1

File tree

1 file changed

+30
-6
lines changed

1 file changed

+30
-6
lines changed

kaitaistruct.py

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ def align_to_byte(self):
221221
self.bits = 0
222222
self.bits_left = 0
223223

224-
def read_bits_int(self, n):
224+
def read_bits_int_be(self, n):
225225
bits_needed = n - self.bits_left
226226
if bits_needed > 0:
227227
# 1 bit => 1 byte
@@ -230,11 +230,7 @@ def read_bits_int(self, n):
230230
bytes_needed = ((bits_needed - 1) // 8) + 1
231231
buf = self.read_bytes(bytes_needed)
232232
for byte in buf:
233-
# Python 2 will get "byte" as one-character str, thus
234-
# we need to convert it to integer manually; Python 3
235-
# is fine as is.
236-
if isinstance(byte, str):
237-
byte = ord(byte)
233+
byte = KaitaiStream.int_from_byte(byte)
238234
self.bits <<= 8
239235
self.bits |= byte
240236
self.bits_left += 8
@@ -253,6 +249,34 @@ def read_bits_int(self, n):
253249

254250
return res
255251

252+
# Unused since Kaitai Struct Compiler v0.9+ - compatibility with
253+
# older versions.
254+
def read_bits_int(self, n):
255+
return self.read_bits_int_be(n)
256+
257+
def read_bits_int_le(self, n):
258+
bits_needed = n - self.bits_left
259+
if bits_needed > 0:
260+
# 1 bit => 1 byte
261+
# 8 bits => 1 byte
262+
# 9 bits => 2 bytes
263+
bytes_needed = ((bits_needed - 1) // 8) + 1
264+
buf = self.read_bytes(bytes_needed)
265+
for byte in buf:
266+
byte = KaitaiStream.int_from_byte(byte)
267+
self.bits |= (byte << self.bits_left)
268+
self.bits_left += 8
269+
270+
# raw mask with required number of 1s, starting from lowest bit
271+
mask = (1 << n) - 1
272+
# derive reading result
273+
res = self.bits & mask
274+
# remove bottom bits that we've just read by shifting
275+
self.bits >>= n
276+
self.bits_left -= n
277+
278+
return res
279+
256280
# ========================================================================
257281
# Byte arrays
258282
# ========================================================================

0 commit comments

Comments
 (0)