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

时间:2013-08-20 03:31:11

标签: python pyserial

我在python 2.7.5中使用pyserial,根据docs

  

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

     

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

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

ch = ser.read()
print ch.encode('hex')

这没问题。

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

例如:

print ch

什么都不打印,因为它是一个不可见的字符(在本例中为chr(0x02))。

print int(ch)

引发错误

ValueError: invalid literal for int() with base 10: '\x02'

尝试print int(ch,16)ch.decode()ch.encode('dec')ord(ch)unichr(ch)都会出错(或没有​​)。

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

print int(ch.encode('hex'),16)

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

相信我,我已经在python 3中搜索并找到了解决方法,并使用导入的模块进行解决方法。是否有一种本地方式来做到这一点,而不需要导入一些东西来获得一个值?

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

以下是我使用的代码生成90

count = ser.read(1)
print "count:",ord(ch)

输出为count: 90

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

由于

2 个答案:

答案 0 :(得分:5)

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

i= ord( chr(2) )
i= ord( '\x02' )

都会将变量2存储在变量i中。

答案 1 :(得分:2)

我想你想使用ord()

ch = '\x02'
print ord(ch)
=> 2