我在 python 2.7.5 中使用 pyserial,根据文档:
read(size=1) 参数: size – 要读取的字节数。返回:
从端口读取的字节数。从串口读取 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
,但我知道我做错了。如何更简单地将 aa chr(0x02) 值转换为 2?
相信我,我已经搜索并正在寻找在 python 3 中执行此操作的方法,以及使用导入模块的解决方法。有没有一种本地方法可以做到这一点,而无需通过导入某些东西来获得一个值?
编辑:我已经尝试过ord(ch)
,但它正在返回90
,我知道值是2
,1)因为这是我所期望的,2)因为当我收到错误时,它会告诉我(如上)
这是我正在使用的生成代码90
count = ser.read(1)
print "count:",ord(ch)
输出是count: 90
一旦我剪切并粘贴上面的代码,我就看到了错误count != ch
!!!!
谢谢