首页 > 解决方案 > 为什么 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()

标签: pythoncomparebyte

解决方案


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

推荐阅读