我正在开发一种校验和功能,其中将4个字节转换为下面列出的十六进制字符字符串(例如'00ABCDEF':]
packet = "004100ff"
checksum = 0
for el in packet:
checksum ^= ord(el)
print (hex(checksum))
当前,获得正确校验和(0xbe)的唯一方法是手动将字符串重写为packet ='\ x00 \ x41 \ x00 \ xff',这不能自动完成。
我如何让python将字符串解释为好像每个2个字符都是十六进制的字节来执行校验和?
如果我正确理解您的问题。这应该可以。
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))
我如何让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