Вопрос по python – Чтение 3 байтов в виде целого числа

12

Как я могу прочитать 3 байта как целое число?

Предоставляет ли модуль struct что-то подобное?

Я могу прочитать в 3 байта и добавить дополнительный \ x00, а затем интерпретировать его как 4-байтовое целое число, но это кажется ненужным.

Убедитесь, что вы добавили NUL в правый конец ... Ignacio Vazquez-Abrams

Ваш Ответ

3   ответа
14

поэтому я думаю, что ваша идея добавить & quot; это самый простой способ.

In [30]: import struct
In [38]: struct.pack('>3b',0,0,1)
Out[38]: '\x00\x00\x01'

In [39]: struct.unpack('>i','\x00'+'\x00\x00\x01')
Out[39]: (1,)
+1 за структуру ...
12

int разработал новый метод.from_bytesТаким образом, вы можете использовать следующее вместоstruct.unpack:

int.from_bytes(b'\x00\x00\x01', 'big')  
# 1

Для справки смотрите:http://docs.python.org/dev/library/stdtypes.html#int.from_bytes

3

struct модуль будет:

>>> s = '\x61\x62\xff'
>>> a = sum([ord(b) * 2**(8*n) for (b, n) in zip(s, range(len(s))[::-1])])
>>> print a
6382335

где порядок байтов является байтовым Это дает тот же результат, что и с unutbu ответ:

>>> print struct.unpack('>I', '\x00' + s)[0]
6382335

Для порядка байтов с прямым порядком байтов преобразование будет:

>>> a = sum([ord(b) * 2**(8*n) for (b, n) in zip(s, range(len(s)))])
>>> print a
16736865
>>> print struct.unpack('<I', s + '\x00')[0]
16736865

Похожие вопросы