如何在python中获取单个pyserial字节的整数值

Mad*_*vad 4 python pyserial

我在python 2.7.5中使用pyserial,根据文档:

read(size = 1)参数:size - 要读取的字节数.返回:
从端口读取的字节数.从串口读取大小字节.如果设置了超时,则可能会按要求返回较少的字符.没有超时,它将阻塞,直到读取所请求的字节数.

在版本2.5中更改:返回可用时的字节实例(Python 2.6和更新版本),否则返回str.

大多数情况下,我想将值用作十六进制值,因此当我使用它们时,我使用以下代码:

ch = ser.read()
print ch.encode('hex')
Run Code Online (Sandbox Code Playgroud)

这没问题.

但是现在我试图将一个值作为整数读取,因为它是从serial.read读入的一个字符串,我在尝试获取整数值时遇到错误.

例如:

print ch
Run Code Online (Sandbox Code Playgroud)

什么都不打印,因为它是一个不可见的字符(在这种情况下是chr(0x02)).

print int(ch)
Run Code Online (Sandbox Code Playgroud)

引发错误

ValueError: invalid literal for int() with base 10: '\x02'
Run Code Online (Sandbox Code Playgroud)

努力print int(ch,16),ch.decode(),ch.encode('dec'),ord(ch),unichr(ch)所有给出错误(或没有).

事实上,我让它工作的唯一方法是将其转换为十六进制,然后再转换为整数:

print int(ch.encode('hex'),16)
Run Code Online (Sandbox Code Playgroud)

这会返回预期的2,但我知道我这样做是错误的.如何将aa chr(0x02)值更简单地转换为2?

相信我,我已经搜索过,并且正在寻找在python 3中实现此目的的方法,以及使用导入模块的解决方法.是否有一种本地方式来做到这一点,而不需要导入一些东西来获得一个值?

编辑:我已经尝试ord(ch)但是它正在返回90,我知道值是2,1)因为这是我所期待的,2)因为当我收到错误时,它告诉我(如上所述)

这是我正在使用的代码生成 90

count = ser.read(1)
print "count:",ord(ch)
Run Code Online (Sandbox Code Playgroud)

输出是 count: 90

一旦我剪切并粘贴上面的代码,我就看到了错误count != ch!!!!

谢谢

Mar*_*ssi 5

使用该ord功能.你输入的内容是a chr(2)(作为常量,也可以表示为'\ x02').

i= ord( chr(2) )
i= ord( '\x02' )
Run Code Online (Sandbox Code Playgroud)

都会将整数2存储在变量中i.