我需要编写一个函数来计算其参数的校验和 然后发送带有校验和的参数。
当我手动计算校验和时,我正在做这样的事情:
data = '\x03\x2F\x00\x00\x02\x12\x01\x47'
然后
s.sendall(data)
有没有办法将数据写为:
data = "03 2F 00 00 02 12 01"
让python知道我想要的数据是什么 看作十六进制? 如果python查看为十六进制将我的函数看起来像
for i in range(len(data)):
sum = sum +data[i]
或类似的东西?
答案 0 :(得分:4)
要表示为十六进制,请使用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))
答案 1 :(得分:1)
你期望看到这个:?
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
如果没有 - 澄清你的问题
答案 2 :(得分:1)
我认为你想把它们作为价值阅读,对吗?尝试:
val = '5c'
hval = int(val, 16)
print hval
92
(十进制为0x5C)
走向另一个方向:
val = '%x' % 92
print val
'5C'
答案 3 :(得分:1)
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
答案 4 :(得分:0)
这就是我想要做的事情
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))