【问题标题】:how to get the integer value of a single pyserial byte in python如何在python中获取单个pyserial字节的整数值
【发布时间】: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!!!!

谢谢

【问题讨论】:

    标签: python pyserial


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢 Mario(还有 mattexx,你被秒杀了),我确实尝试过 ord,但我传递了错误的变量。这就是我所追求的答案。再次感谢!可以的话我会接受的
    【解决方案2】:

    我想你想用ord()

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

    【讨论】:

    • 感谢 mattexx,这就是我要找的东西,我只是做错了,即我尝试过 ord 但我传递了错误的变量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多