【发布时间】:2013-08-20 03:31:10
【问题描述】:
我在 python 2.7.5 中使用 pyserial,根据 docs:
读取(大小=1) 参数: size - 要读取的字节数。 退货:
从端口读取的字节。 从串口读取 size 字节。如果设置了超时,它可能会根据请求返回更少的字符。没有超时,它将阻塞,直到读取请求的字节数。在 2.5 版中更改:在可用时返回字节实例(Python 2.6 和更新版本),否则返回 str。
大多数情况下,我想将这些值用作十六进制值,因此当我使用它们时,我使用以下代码:
ch = ser.read()
print ch.encode('hex')
这没问题。
但是现在我尝试将 ONE 值作为整数读取,因为它是从 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!!!!
谢谢
【问题讨论】: