Почему b '\ x02' не совпадает со значением 2 или int (2) в Python? - PullRequest
1 голос
/ 16 апреля 2019

У меня есть компьютер, отправляющий значение байта 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()

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Ваша функция GetSerialData, по-видимому, фактически не возвращает последовательные данные.Он печатает последовательные данные, но после этого вы никогда не обращаетесь к received_data и вместо этого возвращаете 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
0 голосов
/ 16 апреля 2019

\x02 - это код ASCII для гексагона 02, который равен STX (начало текста). \x32 - это 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.

Кроме того, убедитесь, что прочитанная информация действительно имеет длину в один байт.

...