我从串口接收数据。它不是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' '
。
答案 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()注册的任何其他名称,请参阅错误处理程序部分。有关可能的编码列表,请参阅标准编码部分。