Есть ли лучший способ, чем int (byte_buffer.encode ('hex'), 16) - PullRequest
3 голосов
/ 28 мая 2009

В Python я постоянно использую следующую последовательность для получения целочисленного значения из байтового буфера (в python это str).

Я получаю буфер из подпрограммы struct.unpack (). Когда я распаковываю 'char', используя

byte_buffer, = struct.unpack('c', raw_buffer)
int_value = int( byte_buffer.encode('hex'), 16 )

Есть ли лучший способ?

Ответы [ 3 ]

6 голосов
/ 28 мая 2009

Модуль struct хорошо распаковывает двоичные данные.

int_value = struct.unpack('>I', byte_buffer)[0]
2 голосов
/ 28 мая 2009

Ограничен 1 байтом - Ноа Кэмпбелл 18 минут назад

Тогда лучший способ сделать это - создать экземпляр распаковщика структуры.

from struct import Struct

unpacker = Struct("b")
unpacker.unpack("z")[0]

Обратите внимание, что вы можете изменить "b" на "B", если вы хотите беззнаковый байт. Кроме того, формат endian не требуется.

Для всех, кто хочет знать метод неограниченных целых чисел, создайте вопрос и сообщите мне в комментариях.

1 голос
/ 29 мая 2009

Если мы говорим о получении целочисленного значения байта, то вы хотите это:

ord(byte_buffer)

Не могу понять, почему это еще не предложено.

...