2015-12-02 27 views
0

我正在用Python读取一些字节,如何不自动将字节转换为Python中的ascii

但是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' 

的问题是它具有比F F不同的值的FF。

+1

您的期望并不是Python中字节的正确表示。我不确定那应该是什么。 –

+0

如果'port.read()'给你字节。你能把它列为清单吗?字节和字符串之间始终存在问题。 –

回答

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 

这就是你在找什么?

+0

是和不是...... 零件'?\ x86ff'等于63134255作为十进制 但是'x3fx86x66x66'等于63134102102作为小数。 你明白我的问题吗? – EisBaer

+1

@EisBaer,'hex(63134255)=='0x3c35a2f',所以没有任何意义。 –

+0

抱歉忘了提及我收到的字节将被转换为小数。 0xaa,0x10,0xb1和0x85仅仅是一个开始,停止,错误字节...... – EisBaer

0

顾名思义,bytearray就是一个字节数组。当你收到这些数据时,你会得到确切的字节,然后将它们存储在你的answ变量中。然而,当你打印到屏幕蟒蛇假设ASCII编码,所以,只要是可打印字符打印作为字符而不是十六进制,但它们实际上是相同的如下面的代码片段展示了:

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

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

查找一个ascii表以查看转换是如何进行的。如果你在linux上,你可以在终端输入man ascii来查看。

相关问题