为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 b'\x02' 与 Python 中的值 2 或 int(2) 不同?

为什么 b'\x02' 与 Python 中的值 2 或 int(2) 不同?

慕斯709654 2022-01-11 20:15:26
我有一台 PC 将字节值 2 发送到 Raspberry Pi。但我无法弄清楚为什么 Python 程序在接收到值时不会评估为 true。如果我打印收到的值,它会将 b'\x02' 作为输出写入。import serialdef GetSerialData():    x = ser.inWaiting()    if x > 0:        received_data = ser.read(x)        print (received_data)    return xser = serial.Serial ("/dev/ttyAMA0", 9600)try:    while True:        SData = GetSerialData ()        if ( SData == b'\x02'):            print ("Ok - value is 2")except KeyboardInterrupt:    ser.close()
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

您的GetSerialData函数似乎并未实际返回串行数据。它打印串行数据,但之后您再也不会引用received_data它,而是 return x,它似乎是一个表示响应大小的整数。


不要返回 x,而是尝试返回received_data。


def GetSerialData():

    x = ser.inWaiting()

    if x > 0:

        return ser.read(x)

    else:

        return b"" #or whatever value is appropriate when no data has been sent yet


查看完整回答
反对 回复 2022-01-11
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

\x02是十六进制 02 的 ASCII 码,即STX(文本开头)。 \x32是 digit 的 ASCII 码2。

如果SData是整数或任何非(二进制)字符串,请记住使用str(SData).将其转换为字符串。

另外,一般来说,b'A' != 'A'. 您想使用.encode('ascii')将 Python 字符串转换为 ASCII 二进制字符串。


>>> binary_A_from_string = 'A'.encode('ascii')

>>> binary_A_from_string

b'A'


>>> binary_A = '\x41' # ASCII 41 (dec 65) is 'A'

>>> binary_A

b'A'


>>> binary_A == 'A'

False

>>> binary_A == binary_A_from_string

True

这是因为 Python 将二进制 ASCII 字符串视为不同于标准 Python 字符串。


此外,确保读取的信息实际上是一个字节长。


查看完整回答
反对 回复 2022-01-11
  • 2 回答
  • 0 关注
  • 848 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信