@@ -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