猿问

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

我有一台 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()


慕斯709654
浏览 849回答 2
2回答

饮歌长啸

您的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

白衣染霜花

\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_stringb'A'>>> binary_A = '\x41' # ASCII 41 (dec 65) is 'A'>>> binary_Ab'A'>>> binary_A == 'A'False>>> binary_A == binary_A_from_stringTrue这是因为 Python 将二进制 ASCII 字符串视为不同于标准 Python 字符串。此外,确保读取的信息实际上是一个字节长。
随时随地看视频慕课网APP

相关分类

Python
我要回答