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

How to convert byte to hex?

我需要通过串行发送一些数据,但在发送之前,我需要使用模 256 计算校验和。我可以计算出校验和并将其显示为十六进制值(在这种情况下,校验和是 0xb3) 但它显示为 0xb3 但我需要它是 \xb3 因为我在它之前发送其他消息。

我试过encoding,bytes和bytearray,但是无法得到它发送的十六进制值。它将 '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 和将其替换为 \xb3.

不需要通过旋转将 csum 转换为字符串然后再转换回字节字符串,您希望它首先作为单个字节。

csum = bytes([j % 256])