web-dev-qa-db-fra.com

Convertir Python octet en "entier 8 bits non signé"

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é?

17
bbb

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 .

20
codeape

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".

7
SilentGhost

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.

7
musicinmybrain