Comment convertir entier de la valeur à un tableau de quatre octets en python
J'ai besoin d'envoyer un message d'octets en Python et j'ai besoin de convertir un entier non signé nombre à un tableau d'octets. Comment voulez-vous convertir un entier de valeur à un tableau de quatre octets en Python? Comme en C:
uint32_t number=100;
array[0]=(number >>24) & 0xff;
array[1]=(number >>16) & 0xff;
array[2]=(number >>8) & 0xff;
array[3]=number & 0xff;
Quelqu'un peut me montrer comment faire? Il est étrange pour moi à la première de programme sans types.
Vous devez vous connecter pour publier un commentaire.
Sven a vous répondre. Cependant, octet décalage des numéros (comme dans votre question) est également possible en Python:
Ont un look à la
struct
module. Probablement tous vous avez besoin eststruct.pack("I", your_int)
pour le pack entier en une chaîne de caractères, puis de les placer cette chaîne de caractères dans le message. La chaîne de format"I"
désigne un entier 32 bits non signé.Si vous souhaitez décompresser une chaîne à un n-uplet de nombres entiers, vous pouvez utiliser
struct.unpack("4b", s)
:(L'exemple est évidemment sur un little-endian machine.)
C'est un vieux thread, mais en Python 3.2+ maintenant vous pouvez simplement dire:
ou
byteorder = 'little'
en fonction de vos besoins. Documentation ici.Au cas où quelqu'un regarde cette question un peu plus tard ...
Cette déclaration doit être équivalent au code dans la question d'origine:
Et je ne pense pas que ce qui importe est ce que l'ordre des octets de l'hôte est.
Si votre entiers sont plus grandes que int32, vous pouvez utiliser
"!Q"
dans l'appel àpack()
pour int64 (si votre système prend en chargeQ
).Et
list()
ou mêmebytearray()
fonctionnera à la place detuple()
.Note, le résultat est une séquence de
str
objets (contenant chacun un seul octet), pas des entiers. Si vous devez avoir une liste d'entiers, vous pouvez le faire:... ou ceci:
Mais en utilisant
map()
commence à faire des choses un peu brouillon.Vous pouvez très bien faire la même chose:
ou vous pouvez faire quelque chose de plus court:
Il peut être fait avec
ctypes
ainsi. C'est surtout utile pour la conversion de nombres à virgule flottante en octets. Exemple:Et complet: vous pouvez également utiliser le
array
module: