如何将字节转换为十六进制?

时间:2021-03-09 17:11:20

标签: python hex

我需要通过串行发送一些数据,但在发送之前,我需要使用模 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

1 个答案:

答案 0 :(得分:1)

无需通过循环将 csum 转换为字符串然后再转换回字节字符串,您首先希望它是单个字节。

csum = bytes([j % 256])