Модуль Python struct
позволяет интерпретировать байты как различные типы структуры данных с контролем над порядком байтов.
Если вы прочитали одно трехбайтовое число из файла, вы можете преобразовать его следующим образом:
struct.unpack('<I', bytes + '\0')
Модуль не поддерживает 24-битные слова, поэтому '\0'
-padding.
РЕДАКТИРОВАТЬ: подписанные номера сложнее. Вы можете скопировать старший бит и установить старший бит на ноль, потому что он перемещается на самое старшее место из 4 байтов (последний \xff
имеет его).:
struct.unpack('<i', bytes + ('\0' if bytes[2] < '\x80' else '\xff'))
Или для python3 (bytes
- зарезервированное слово, проверка байта массива байтов дает int
):
struct.unpack('<i', chunk + ('\0' if chunk[2] < 128 else '\xff'))