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

为什么是b'\x02&x27;与Python中的值2或int(2)不同?,python,compare,byte,Python,Compare,Byte,我有一台PC将字节值2发送给Raspberry Pi 但我不明白为什么Python程序在收到值时计算结果不为true 如果我打印收到的值,它会将b'\x02'写入输出 import serial def GetSerialData(): x = ser.inWaiting() if x > 0: received_data = ser.read(x) print (received_data) return x ser = se

我有一台PC将字节值2发送给Raspberry Pi

但我不明白为什么Python程序在收到值时计算结果不为true

如果我打印收到的值,它会将b'\x02'写入输出

import serial

def GetSerialData():
    x = ser.inWaiting()
    if x > 0:
        received_data = ser.read(x)
        print (received_data)
    return x


ser = serial.Serial ("/dev/ttyAMA0", 9600)
try:
    while True:
        SData = GetSerialData ()
        if ( SData == b'\x02'):
            print ("Ok - value is 2")

except KeyboardInterrupt:
    ser.close()

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

请尝试返回
接收的\u数据,而不是返回x

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

\x02
是十六进制02的ASCII码,即
STX
(文本开头)。
\x32
是数字
2
的ASCII码
如果
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字符串


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

您可能读取了多个字节。根据字节的发送顺序(大端或小端),
b'\x02'
可能是第一个或最后一个,但
SData
包含的字节数将超过该字节数,因此在任何情况下都不等于该字节数(顺便说一句,您可能更喜欢将
ser
作为参数传递给
GetSerialData
,而不是隐式地将其用作全局变量)你能提供电脑正在运行的代码吗?我的错!!老实说,这是一个愚蠢的错误。我正在返回串行缓冲区中的字节数,我应该在其中返回实际数据。一旦我将代码更改为返回
接收到的\u数据
,它就会按预期工作。建议
返回序列读取(x)
让我走上正轨。谢谢你的帮助。