Solución:
Has declarado packet
como el representación imprimible del mensaje:
packet="0x8d 0x1e 0x19 0x1b 0x83 0x00 0x01 0x01 0x00 0x00 0x00 0x4b 0x00 0x00"
entonces tu mensaje actual no es [0x8d, 0x1e, ..., 0x00]
, pero ['0', 'x', '8', 'd', ..., '0']
en lugar de. Entonces, el primer paso es arreglarlo:
packet="0x8d 0x1e 0x19 0x1b 0x83 0x00 0x01 0x01 0x00 0x00 0x00 0x4b 0x00 0x00"
packet = [chr(int(x, 16)) for x in packet.split(' ')]
O bien, podría considerar codificarlo “correctamente” desde el principio:
packet="x8dx1ex19x1bx83x00x01x01x00x00x00x4bx00x00"
En este punto, podemos xor, miembro por miembro:
checksum = 0
for el in packet:
checksum ^= ord(el)
print checksum, hex(checksum), chr(checksum)
la suma de control que obtengo es 0x59
, no 0xc2
, lo que significa que ha calculado el mensaje incorrecto o el mensaje original no es el que proporcionó.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)