我有一台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()
发布于 2019-04-16 17:00:20
\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字符串。
另外,确保读取的信息实际上是一个字节长。
https://stackoverflow.com/questions/55713024
复制相似问题