在python中计算十六进制校验和

2024-05-18 11:06:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要编写一个函数来计算其参数的校验和 然后发送带有校验和的参数。

当我手动计算校验和时,我正在做这样的事情:

data = '\x03\x2F\x00\x00\x02\x12\x01\x47'

然后

s.sendall(data)

是否有方法将数据写入:

data = "03 2F 00 00 02 12 01"

让python知道我想要数据中的内容 被视为巫术? 如果python将其视为hex,那么我的函数将看起来像

for i in range(len(data)):
    sum = sum +data[i]

或者类似的?


Tags: 数据函数data参数手动事情校验sum
3条回答

你想看这个吗?

input ='\x03\x2F\x00\x00\x02\x12\x01\x47'
output = ' '.join([('{:02X}'.format(ord(c))) for c in input])
print(output)

印刷品:

03 2F 00 00 02 12 01 47

如果没有-澄清你的问题

要表示为十六进制,请使用binascii.hexlify

>>> import binascii
>>> binascii.hexlify('\x03\x2F\x00\x00\x02\x12\x01\x47')
'032f000002120147'
>>> ' '.join(binascii.hexlify(ch) for ch in '\x03\x2F\x00\x00\x02\x12\x01\x47')
'03 2f 00 00 02 12 01 47'

要计算校验和,请迭代每个字节:

data = '\x03\x2F\x00\x00\x02\x12\x01\x47'

checksum = 0
for ch in data:
    checksum += ord(ch)  # ord('\x03`) -> 3

或者使用^{}^{}

checksum = sum(map(ord, data))

我想你想把这些作为价值观来读,对吧?尝试:

val = '5c'
hval = int(val, 16)
print hval

92

(十进制为0x5C)

往另一个方向走:

val = '%x' % 92
print val

'5c'

相关问题 更多 >