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

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

從 Python 2.7 更改為 Python 3.7 數據后得到一個額外的字母?

從 Python 2.7 更改為 Python 3.7 數據后得到一個額外的字母?

素胚勾勒不出你 2023-06-20 13:26:42
我正在開發一個程序,該程序從通過 WiFi 發送的 Android 應用程序接收字符串,該程序最初是為 Python 2.7 編寫的,但在添加了一些附加功能后,我將其更改為 Python 3.7。然而,在做出這種改變之后,我的數據前面多了一個字母,我終究無法弄清楚為什么會這樣。這是我的代碼片段,這是一個非常簡單的 if 語句,用于查看從 Android 應用程序發送了哪個命令并使用該命令控制 Raspberry Pi (4) cam (v.2)。這部分設置連接并等待查看我發送的命令。isoCmd = ['auto','100','200','300','400','500','640','800']HOST = ''PORT = 21567BUFSIZE = 1024ADDR = (HOST,PORT)brightness = 50timelapse = 0tcpSerSock = socket(AF_INET, SOCK_STREAM)tcpSerSock.bind(ADDR)tcpSerSock.listen(5)while True:        print ('Waiting for connection')        tcpCliSock,addr = tcpSerSock.accept()        try:                while True:                        data = ''                        brightness = ' '                        data = tcpCliSock.recv(BUFSIZE)                        dataStr = str(data[1:])                        print ("Here's data ",dataStr)                        if not data:                                break                        if data in isoCmd:                                if data == "auto":                                        camera.iso = 0                                        print ('ISO: Auto')                                else:                                        camera.iso = int(data)                                        print ('ISO: '), data當我啟動程序時,這就是我所看到的:Waiting for connection#If I send command '300'Here's data b'300'Here's data b''Waiting for connection我不確定為什么會有多余的東西b''來自。我通過在數組中的每個項目的開頭添加“b”來測試代碼,它適用于我定義的任何命令,而不適用于任何控制 Pi 相機的命令,因為開頭沒有額外的 b。(這有意義嗎?)我的意思是,我知道我可以毫無問題地發送命令,只是不確定如何去掉多余的字母。如果有人能給我一些建議,那就太好了。感謝您的幫助。
查看完整描述

2 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

字節串由 b 前綴表示。雖然您可以在打印輸出中看到字符串,但它們本質上是字節。

要從中獲取普通字符串,decode函數可以提供幫助。

dataStr.decode("utf-8")


查看完整回答
反對 回復 2023-06-20
?
森欄

TA貢獻1810條經驗 獲得超5個贊

b'data'僅表示引號內的數據已以字節形式接收,如其他答案中所述,您必須對其進行解碼才能以decode('utf-8')字符串形式獲取它。


我已經在下面更新了您的程序,以兼容 v3.7+


from socket import *

isoCmd = ['auto','100','200','300','400','500','640','800']


HOST = ''

PORT = 21567

BUFSIZE = 1024

ADDR = (HOST,PORT)

brightness = 50

timelapse = 0


tcpSerSock = socket(AF_INET, SOCK_STREAM)

tcpSerSock.bind(ADDR)

tcpSerSock.listen(5)


while True:

    print ('Waiting for connection')

    tcpCliSock,addr = tcpSerSock.accept()

    try:

        while True:

            data = ''

            brightness = ' '

            data = tcpCliSock.recv(BUFSIZE).decode('utf-8')

            print ("Here's data "+data)

            if not data:

                break

            if data in isoCmd:

                if data == "auto":

                    camera.iso = 0

                    print ('ISO: Auto')

                else:

                    camera.iso = int(data)

                    print ('ISO: '+ data)

    except Exception as e:

        print(e)


查看完整回答
反對 回復 2023-06-20
  • 2 回答
  • 0 關注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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