我正在开发一种校验和函数,其中将4个字节转换为十六进制的字符串(例如“ 00ABCDEF”),如下所示:
packet = "004100ff"
checksum = 0
for el in packet:
checksum ^= ord(el)
print (hex(checksum))
当前,获取正确校验和(0xbe)的唯一方法是手动将字符串重写为packet ='\ x00 \ x41 \ x00 \ xff',这不能自动完成。
我如何让python将字符串解释为好像每个2个字符都是十六进制的字节一样来执行校验和?
答案 0 :(得分:1)
如果我正确理解您的问题。这应该起作用。
packet = "004100ff"
checksum = 0
bytes_string = [packet[i:i+2] for i in range(0, len(packet), 2)]
for byte_string in bytes_string:
checksum ^= int(byte_string, 16)
print(hex(checksum))
答案 1 :(得分:1)
我如何让python将字符串解释为好像每个2个字符都是十六进制的字节一样来执行校验和?
使用bytes.fromhex()
将str
解释为一系列十六进制数字:
>>> packet = "004100ff"
>>> bytes.fromhex(packet)
b'\x00A\x00\xff'
还请注意,在bytes
上进行迭代将给您int
,因此不再需要ord()
:
>>> for el in bytes.fromhex(packet): print(el) # or list(bytes.fromhex(packet))
...
0
65
0
255