Bonjour,
Je dois réaliser un xor sur ces données
b'\x7A\x01\x4D\x42\x30\x42\x02\x04\x50\x03\x47\x4B\x2D\x40\x05' (ce qui donne 0x37 dans ce cas)
mais l'opération xor (^) ne fonctionne pas en python sur le type bytes
Merci
Version imprimable
Bonjour,
Je dois réaliser un xor sur ces données
b'\x7A\x01\x4D\x42\x30\x42\x02\x04\x50\x03\x47\x4B\x2D\x40\x05' (ce qui donne 0x37 dans ce cas)
mais l'opération xor (^) ne fonctionne pas en python sur le type bytes
Merci
Ce n'est pas le cas en python3.
En python2.7, rien ne t'empêche de convertir chaque caractère vers sa valeur décimale en utilisant la fonction ord():Code:
1
2 >>> [ord(i) for i in s] [122, 1, 77, 66, 48, 66, 2, 4, 80, 3, 71, 75, 45, 64, 5]
Bon, cela fonctionne si je fais par exemple
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 msg = b'\x7a\x01\x4d\x42\x30\x42\x02\x04\x50\x03\x47\x4B\x2D\x40\x05\x00' #check = 0 def checksum(data): pos = 0 check = 0 while pos < len(data): check = check ^ data[pos] pos = pos + 1 return(check) print(hex(checksum(msg)))
Autre solution pour le fun
Code:
1
2
3
4
5
6
7 >>> from functools import reduce >>> from operator import xor >>> >>> msg = b'\x7a\x01\x4d\x42\x30\x42\x02\x04\x50\x03\x47\x4B\x2D\x40\x05\x00' >>> >>> reduce(xor, msg) 55