亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

慕斯709654 2022-01-11 20:15:26
我有一臺 PC 將字節值 2 發送到 Raspberry Pi。但我無法弄清楚為什么 Python 程序在接收到值時不會評估為 true。如果我打印收到的值,它會將 b'\x02' 作為輸出寫入。import serialdef GetSerialData():    x = ser.inWaiting()    if x > 0:        received_data = ser.read(x)        print (received_data)    return xser = serial.Serial ("/dev/ttyAMA0", 9600)try:    while True:        SData = GetSerialData ()        if ( SData == b'\x02'):            print ("Ok - value is 2")except KeyboardInterrupt:    ser.close()
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

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


查看完整回答
反對 回復 2022-01-11
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

\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_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 字符串。


此外,確保讀取的信息實際上是一個字節長。


查看完整回答
反對 回復 2022-01-11
  • 2 回答
  • 0 關注
  • 965 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號