2

我正在尝试测试从串行端口接收到的数据,但似乎无法正确处理。我需要检查数据包中收到的第一个字节是否为 0xBE,因此:

#ser is instance of pyserial serial object
data=ser.read(5)
print "serial RX: " + binascii.b2a_hex(data)
if data[0] != 0xBE:
    print"wrong value"

总是打印:

serial RX: beef000008
wrong value

即使二进制到 ascii 打印显示已收到正确的值。

在这个非常基本的任务中我哪里出错了?

谢谢,罗宾。

4

1 回答 1

3

来自pyserial 的文档

Changed in version 2.5: Returns an instance of bytes when available (Python 2.6 and newer) and str otherwise.

所以我测试了:

>> bytes(0xbe) == 0xbe
False

但是如果你把它转换成int:

>> int(bytes(0xbe)) == 0xbe
True

正如这个stackoverflow 问题所示,字节类型包含在 [PEP-3137 3 ] 中。它就像 python3 的字节数组,但只是python2的别名str

因此,基本上,只需将 pyserial 的输出视为str您正在执行 python2 代码。

于 2013-06-22T20:41:00.363 回答