将str解释为十六进制字符序列

时间:2019-10-04 17:08:39

标签: python python-3.x character-encoding checksum

我正在开发一种校验和函数,其中将4个字节转换为十六进制的字符串(例如“ 00ABCDEF”),如下所示:

packet = "004100ff"
checksum = 0
for el in packet:
    checksum ^= ord(el)
print (hex(checksum))

当前,获取正确校验和(0xbe)的唯一方法是手动将字符串重写为packet ='\ x00 \ x41 \ x00 \ xff',这不能自动完成。

我如何让python将字符串解释为好像每个2个字符都是十六进制的字节一样来执行校验和?

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