5

我在 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!!!!

谢谢

4

2 回答 2

6

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

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

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

于 2013-08-20T03:36:13.233 回答
2

我想你想用ord()

ch = '\x02'
print ord(ch)
=> 2
于 2013-08-20T03:35:38.677 回答