如何将字节转换为十六进制?
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])
我需要通过串行发送一些数据,但在发送之前,我需要使用模 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])