在打印功能中显示串口的十六进制数据

时间:2017-07-05 07:17:47

标签: python hex ascii decode

我从串口接收数据。它不是ASCII数据(如来自putty),而是来自modbus rtu行的十六进制数据(例如,行上有0103AABBCCDD816E数据,其中01是原始十六进制中的一个字节,03是原始十六进制中的另一个字节...等)

我正在使用python 3.6

我只需打印为0103AABBCCDD816E

我试过这段代码:

rx_raw = ser.read(8)
rx=binascii.hexlify(bytearray(rx_raw))
print("raw:  ")
print(rx_raw)   # gives:  b'\x01\x03\xaa\xbb\xcc\xdd\x81n'
print("\n")
print("hexiflied:  ")
print(rx)       # gives: b'0103aabbccdd816e'

binascii.hexlify(bytearray(rx_raw))几乎是我的需要,但我需要摆脱b' '

1 个答案:

答案 0 :(得分:0)

如果要将二进制字符串转换为普通字符串,则应对其进行解码:

b = b'0103aabbccdd816e'
s = b.decode('ascii')

print(b, s, s.upper())
# b'0103aabbccdd816e' 0103aabbccdd816e 0103AABBCCDD816E

来自docs

  

bytes.decode(encoding =" utf-8",errors =" strict")
  bytearray.decode(encoding =" utf-8",errors =" strict")

     

返回从给定字节解码的字符串。默认编码为' utf-8'。可以给出错误以设置不同的错误处理方案。错误的默认值是' strict',这意味着编码错误会引发UnicodeError。其他可能的值是'忽略','替换'以及通过codecs.register_error()注册的任何其他名称,请参阅错误处理程序部分。有关可能的编码列表,请参阅标准编码部分。