我需要编写一个函数来计算其参数的校验和然后发送带有校验和的参数。
当我手动计算校验和时,我正在做这样的事情:
data = 'x03x2Fx00x00x02x12x01x47'
然后
s.sendall(data)
有没有办法将数据写入:
data = "03 2F 00 00 02 12 01"
并让 python 知道我想要数据中的内容被视为十六进制?如果 python 认为这是十六进制,我的函数会看起来像
for i in range(len(data)):
sum = sum +data[i]
或类似的东西?
要表示为十六进制,请使用binascii.hexlify
:
>>> import binascii
>>> binascii.hexlify('x03x2Fx00x00x02x12x01x47')
'032f000002120147'
>>> ' '.join(binascii.hexlify(ch) for ch in 'x03x2Fx00x00x02x12x01x47')
'03 2f 00 00 02 12 01 47'
要计算校验和,请迭代每个字节:
data = 'x03x2Fx00x00x02x12x01x47'
checksum = 0
for ch in data:
checksum += ord(ch) # ord('x03`) -> 3
或使用sum
和map
:
checksum = sum(map(ord, data))
你希望看到这个:?
input ='x03x2Fx00x00x02x12x01x47'
output = ' '.join([('{:02X}'.format(ord(c))) for c in input])
print(output)
指纹:
03 2楼 00 00 02 12 01 47
如果没有 - 澄清您的问题
我想
你想把它们读成值,对吗? 尝试:
val = '5c'
hval = int(val, 16)
print hval
92
(以十进制0x5C)
要往另一个方向走:
val = '%x' % 92
print val
"5c"
data = "03 2f 00 00 02 12 01 47"
for letter in data.replace(' ', '').decode('hex'):
print hex(ord(letter))
0x3
0x2f
0x0
0x0
0x2
0x12
0x1
0x47
这就是我想要做的
def sum_words(data):
return sum(int(x, 16) for x in data.split())
data = "03 2F 00 00 02 12 01"
print(sum_words(data))