Je lis dans un tableau/une liste d'octets à partir de socket. Je veux que Python traite le premier octet comme un "entier 8 bits non signé". Comment est-il possible d'obtenir sa valeur entière comme un entier 8 bits non signé?
Utilisez le module struct .
import struct
value = struct.unpack('B', data[0])[0]
Notez que unpack renvoie toujours un Tuple, même si vous ne déballez qu'un seul élément.
Jetez également un œil à this SO question .
bytes/bytearray est une séquence d'entiers. Si vous accédez simplement à un élément par son index, vous aurez un entier:
>>> b'abc'
b'abc'
>>> _[0]
97
De par leur définition même, les octets et les bytearrays contiennent des entiers dans le range(0, 256)
. Ce sont donc des "entiers 8 bits non signés".
Une autre option très raisonnable et simple, si vous n'avez besoin que de la valeur entière du premier octet, serait quelque chose comme ceci:
value = ord(data[0])
Si vous souhaitez décompresser tous les éléments de vos données reçues en même temps (et qu'il ne s'agit pas simplement d'un tableau homogène), ou si vous avez affaire à des objets multi-octets comme des entiers 32 bits, vous devrez utiliser quelque chose comme le module struct.