如何在python中不自动将字节转换为ascii

时间:2015-12-02 17:10:57

标签: python hex bytearray ascii

我正在使用Python从UART读取一些字节,

然而Python正在将我的一些字节转换为ascii。这会导致问题,因为我得到错误的小数。

import serial
import time

port = serial.Serial("dev/ttyAMA0",baudrate=115200,timeout=1.0)

while True:

    port.write(bytearray([0xAA,0x90,0x3B,0x85]))

    answ = port.read(size=8)
    print (answ)

我得到的答案是:

b'\xaa\x10\xb1?\x86ff\x85'

但我希望:

b'\xaa\x10\xb1\?\x86\f\f\x85'

问题是ff与f f具有不同的值。

2 个答案:

答案 0 :(得分:1)

显示值只是数据的表示。有效ASCII数据将显示ASCII字符,但字节实际为:

>>> answ = b'\xaa\x10\xb1?\x86ff\x85'
>>> for i in answ: print(hex(i))
...
0xaa
0x10
0xb1
0x3f
0x86
0x66
0x66
0x85

这就是你要找的东西吗?

答案 1 :(得分:0)

正如其名称所示,bytearray是一个字节数组。当您收到数据时,您将获得已发送的确切字节,然后存储在answ变量中。但是,当您打印到屏幕时,python采用ASCII编码,因此任何可打印字符都是打印作为该字符而不是十六进制,但它们实际上与以下代码段显示的相同:

a = b"f"
b = b"\x66"
if a == b:
    print("Same")
else:
    print("different")

这会打印“相同”,您可以在此处查看:http://ideone.com/6980Ty

查找ascii表,了解如何进行转换。如果您使用的是Linux,请在终端输入man ascii以查看此内容。