将字符串编码为ASCII字符

问题描述 投票:1回答:2

我正在开发一种校验和功能,其中将4个字节转换为下面列出的十六进制字符字符串(例如'00ABCDEF':]

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

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

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

python-3.x string ascii checksum
2个回答
0
投票

如果我正确理解您的问题。这应该可以。

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))

0
投票

我如何让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
© www.soinside.com 2019 - 2024. All rights reserved.