J'ai une liste d'octets comme suitPython insérer un entier court dans une liste d'octets
pkt_bytes = [ 0x02,0x07, 0xff,0xff ,0x00,0x03]
en position 0xff,0xff
Je veux mettre un 16bit entier court
Comment puis-je faire
Cordialement
J'ai une liste d'octets comme suitPython insérer un entier court dans une liste d'octets
pkt_bytes = [ 0x02,0x07, 0xff,0xff ,0x00,0x03]
en position 0xff,0xff
Je veux mettre un 16bit entier court
Comment puis-je faire
Cordialement
Vous pouvez utiliser le struct
module pour emballer des valeurs dans des formats appropriés:
>>> pkt_bytes = [0x02, 0x07, 0xff, 0xff, 0x00, 0x03]
>>> myint = 123
>>> pkt_bytes[3:5] = [ord(b) for b in struct.pack("H",myint)]
>>> pkt_bytes
[2, 7, 255, 123, 0, 3]
Par défaut, cela utilisera l'ordre natif des octets, mais vous pouvez remplacer cela en utilisant les modificateurs pour formater la chaîne. Étant donné que votre variable est appelée pkt_bytes
Je suppose que vous voulez réseau (big-endian) l'ordre des octets qui est signifié par un !
:
>>> struct.pack("!H",5000)
'\x13\x88'
Merci Dave, vous êtes une star – mikip
Essayez:
>>> pkt_bytes.insert(3, 0xaa)
>>> help(pkt_bytes.insert)
Help on built-in function insert:
insert(...)
L.insert(index, object) -- insert object before index
Le code ci-dessous remplacera toutes les occurrences de 0xff
avec 0x04
jusqu'à ce qu'il n'y ait plus 0xff
left dans la liste.
pkt_bytes = [0x02, 0x07, 0xff, 0xff ,0x00, 0x03]
while True:
try:
idx = pkt_bytes.index(0xff)
pkt_bytes[idx] = 0x04
except ValueError:
break
>>> pkt_bytes = [ 0x02,0x07, 0xff,0xff ,0x00,0x03]
>>> pkt_bytes[2:4] = [pkt_bytes[2] << 8 | pkt_bytes[3]]
>>> pkt_bytes
[2, 7, 65535, 0, 3]
Voulez-vous remplacer * * les deux éléments '0xff' avec quelque chose? S'il vous plaît clarifier votre question. –
petit ou gros boutiste? – ebo
Salut Je pense que j'ai besoin d'utiliser la fonction struct pack (j'aurai besoin d'insérer d'autres types de données dans le paquet en dehors des entiers courts). J'essaie de construire des paquets pour envoyer sur un réseau, c'est gros format endian Merci – mikip