我在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
!!!!
由于
答案 0 :(得分:5)
使用ord
功能。您输入的内容是chr(2)
(作为常量,也可以表示为' \ x02')。
i= ord( chr(2) )
i= ord( '\x02' )
都会将变量2存储在变量i
中。
答案 1 :(得分:2)
我想你想使用ord()
ch = '\x02'
print ord(ch)
=> 2