Преобразуйте байт Python в "unsigned 8 bit integer"

Я читаю в байтовом массиве/списке из сокета. Я хочу, чтобы Python обрабатывал первый байт как "неподписанное 8-битное целое число". Как можно получить целое значение в виде 8-битного целого числа без знака?

Ответы

Ответ 1

Используйте модуль struct.

import struct
value = struct.unpack('B', data[0])[0]

Обратите внимание, что распаковка всегда возвращает кортеж, даже если вы только распаковываете один элемент.

Кроме того, посмотрите этот вопрос SO.

Ответ 2

bytes/bytearray - последовательность целых чисел. Если вы просто получаете доступ к элементу по его индексу, вы получите целое число:

>>> b'abc'
b'abc'
>>> _[0]
97

По самому своему определению байты и байты содержат целые числа в range(0, 256). Таким образом, они представляют собой "неподписанные 8-битные целые числа".

Ответ 3

Еще один очень разумный и простой вариант, если вам нужно только первое целочисленное значение байта, будет примерно следующим:

value = ord(data[0])

Если вы хотите сразу распаковать все элементы ваших полученных данных (и они не только однородный массив), либо если вы имеете дело с многобайтовыми объектами, такими как 32-битные целые числа, тогда вам нужно будет использовать что-то вроде struct module.