我需要通过串行发送一些数据,但在发送之前,我需要使用模 256 计算校验和。我可以计算校验和并将其显示为十六进制值(在这种情况下,校验和为 {{1 }}) 但它显示为 0xb3
但我需要它是 0xb3
因为我在它之前发送其他消息。
我尝试过编码、字节和字节数组,但无法得到它发送的十六进制值。它将 \xb3
作为字符串发送。
'0xb3'
完整字符串的输出是 def calculate_csum(message):
message = b'\x60\x08\x46\x52\x41\x50\x5a\x45\x52\x31' #just temp
j = 0
for i in message:
j = j + i
csum = hex(j % 256)
csum = csum.encode("ascii")
print(csum)
full_string = message + csum
print (full_string)
return csum
但如果我用 b'\x08FRAPZER10xb3'
对其进行硬编码,我得到 b'\x60\x08\x46\x52\x41\x50\x5a\x45\x52\x31\xb3'
它可以工作,所以我需要删除 b'\x08FRAPZER1\xb3'
并替换它与0xb3
。
答案 0 :(得分:1)
无需通过循环将 csum
转换为字符串然后再转换回字节字符串,您首先希望它是单个字节。
csum = bytes([j % 256])