Python 字節(jié)流,字符串,十六進(jìn)制相互轉(zhuǎn)換實(shí)例(binascii,bytes)
問(wèn)題描述
最近做一個(gè)項(xiàng)目,是用Python進(jìn)行相關(guān)的串口操作。及將相關(guān)指令通過(guò)串口發(fā)給設(shè)備,設(shè)備根據(jù)發(fā)過(guò)來(lái)的指令來(lái)做出相應(yīng)的操作,所用的庫(kù)是Pyserial。在最初開(kāi)發(fā)時(shí),出現(xiàn)的問(wèn)題在于:別人給的文檔里面的命令是十六進(jìn)制的。例如,給出一個(gè)指令:
5aa5 07 82 1000 3132 3334 。 那么,我們需要思考的是,我們?nèi)绾螌⑸厦娴闹噶?,轉(zhuǎn)換為pyserial庫(kù)進(jìn)行寫(xiě)操作時(shí)(write)所需要的bytes類(lèi)型。
解決方法
首先,我們需要知道的是,我們首先,需要用字符串構(gòu)造成上面的指令,然后我們將它轉(zhuǎn)換成bytes。我們可以使用encode()函數(shù)將字符串轉(zhuǎn)為bytes格式:
然后我們就可以使用write對(duì)串口進(jìn)行發(fā)數(shù)據(jù)了:
這里需要說(shuō)明的是,我們發(fā)送的是字符串的1234,串口那邊就根據(jù)ascii進(jìn)行解析。所以就變成了 31 32 33 34。
接下來(lái),再來(lái)更換一個(gè)場(chǎng)景,我們構(gòu)造好了一個(gè)十六進(jìn)制的bytes,需要將它還原成字符串:
解析串口發(fā)過(guò)來(lái)的數(shù)據(jù),首先我們查看從串口發(fā)過(guò)來(lái)的數(shù)據(jù)格式:
可以看到,我們發(fā)送的指令,和收到的指令,看起來(lái)不一致,那么我們也就無(wú)法進(jìn)行調(diào)試,也就無(wú)法查看發(fā)過(guò)來(lái)的指令是否有錯(cuò)誤,所以,我們需要對(duì)接收到的指令進(jìn)行轉(zhuǎn)換。
可以看到,我們通過(guò)binascii中的函數(shù),對(duì)發(fā)送過(guò)來(lái)的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換成了我們能夠看看懂的命令字符串。
接下來(lái),我們?nèi)绾螌⑹盏降拿睿D(zhuǎn)換為文字?例如,我們收到了一串bytes,如果將它轉(zhuǎn)換為明文?
如上圖,我們將收到的bytes已經(jīng)轉(zhuǎn)換成了字符串格式,然后將里面的31 32 33 34提取出來(lái),然后,我們將它們放入一個(gè)數(shù)組,經(jīng)過(guò)上面的運(yùn)算以后,我們就得到了明文數(shù)據(jù)。
如何將十六進(jìn)制轉(zhuǎn)換為字節(jié)流?
上述兩個(gè)方法均可。
總結(jié)
由于對(duì)上述的知識(shí)點(diǎn)不是特別熟悉,所以表述可能有一定的混亂。當(dāng)初想實(shí)現(xiàn)上述幾點(diǎn)功能時(shí)也費(fèi)了很大的勁,所以才寫(xiě)在這里供以后后續(xù)使用。后來(lái)者進(jìn)行學(xué)習(xí)時(shí),無(wú)需仔細(xì)看文字,只需要看圖片,了解前后數(shù)據(jù)類(lèi)型的轉(zhuǎn)化成什么樣,是否符合自己的需求即可。
補(bǔ)充知識(shí):python中字符之間的轉(zhuǎn)換函數(shù)
int(x [,base ]) 將x轉(zhuǎn)換為一個(gè)整數(shù)
long(x [,base ]) 將x轉(zhuǎn)換為一個(gè)長(zhǎng)整數(shù)
base默認(rèn)參數(shù)值為10,也就是說(shuō)把字符串'x'視為十進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)
print int('12345',8) # 5349
float(x ) 將x轉(zhuǎn)換到一個(gè)浮點(diǎn)數(shù)
complex(real [,imag ]) 創(chuàng)建一個(gè)復(fù)數(shù)
str(x ) 將對(duì)象 x 轉(zhuǎn)換為字符串
repr(x ) 將對(duì)象 x 轉(zhuǎn)換為表達(dá)式字符串
eval(str ) 用來(lái)計(jì)算在字符串中的有效Python表達(dá)式,并返回一個(gè)對(duì)象
tuple(s ) 將序列 s 轉(zhuǎn)換為一個(gè)元組
list(s ) 將序列 s 轉(zhuǎn)換為一個(gè)列表
chr(x ) 將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)字符
unichr(x ) 將一個(gè)整數(shù)轉(zhuǎn)換為Unicode字符
ord(x ) 將一個(gè)字符轉(zhuǎn)換為它的整數(shù)值
hex(x ) 將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)十六進(jìn)制字符串
oct(x ) 將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)八進(jìn)制字符串
以上這篇Python 字節(jié)流,字符串,十六進(jìn)制相互轉(zhuǎn)換實(shí)例(binascii,bytes)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python 內(nèi)置函數(shù)進(jìn)制轉(zhuǎn)換的用法(十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制)
- Python二進(jìn)制串轉(zhuǎn)換為通用字符串的方法
- Python 字符串與二進(jìn)制串的相互轉(zhuǎn)換示例
- Python實(shí)現(xiàn)的十進(jìn)制小數(shù)與二進(jìn)制小數(shù)相互轉(zhuǎn)換功能
- Python 16進(jìn)制與中文相互轉(zhuǎn)換的實(shí)現(xiàn)方法
- python中常見(jiàn)進(jìn)制之間的轉(zhuǎn)換方式
- python十進(jìn)制和二進(jìn)制的轉(zhuǎn)換方法(含浮點(diǎn)數(shù))
- python中str、bytes、十六進(jìn)制字符串之間的相互轉(zhuǎn)換方法
相關(guān)文章
基于Python實(shí)現(xiàn)語(yǔ)音識(shí)別功能
這篇文章給大家介紹了如何基于Python實(shí)現(xiàn)語(yǔ)音識(shí)別功能,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,具有一定的參考價(jià)值,需要的朋友可以參考下2023-12-12Python中最強(qiáng)大的錯(cuò)誤重試庫(kù)(tenacity庫(kù))
本文要給大家介紹的tenacity庫(kù),可能是目前Python生態(tài)中最好用的錯(cuò)誤重試庫(kù),主要介紹tenacity的主要使用方法和特性,具有一定的參考價(jià)值,感興趣的可以了解一下2022-04-04python實(shí)現(xiàn)簡(jiǎn)單的tcp 文件下載
這篇文章主要介紹了python如何實(shí)現(xiàn)簡(jiǎn)單的tcp文件下載,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-09-09Django框架創(chuàng)建項(xiàng)目的方法入門(mén)教程
這篇文章主要介紹了Django框架創(chuàng)建項(xiàng)目的方法,結(jié)合實(shí)例形式分析了Django框架管理工具的使用及創(chuàng)建項(xiàng)目的相關(guān)操作技巧,需要的朋友可以參考下2019-11-11編寫(xiě)Python腳本來(lái)獲取Google搜索結(jié)果的示例
這篇文章主要介紹了編寫(xiě)Python腳本來(lái)獲取Google搜索結(jié)果的示例,也是利用Python編寫(xiě)爬蟲(chóng)的一個(gè)簡(jiǎn)單實(shí)現(xiàn),需要的朋友可以參考下2015-05-05教你用YOLOv5實(shí)現(xiàn)多路攝像頭實(shí)時(shí)目標(biāo)檢測(cè)功能
目標(biāo)檢測(cè)是計(jì)算機(jī)視覺(jué)的研究方向之一,下面這篇文章主要給大家介紹了關(guān)于如何利用YOLOv5實(shí)現(xiàn)多路攝像頭實(shí)時(shí)目標(biāo)檢測(cè)功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03Python調(diào)用飛書(shū)發(fā)送消息的示例
這篇文章主要介紹了Python調(diào)用飛書(shū)發(fā)送消息的示例,幫助大家更好的理解和學(xué)習(xí)python編程語(yǔ)言的用法,感興趣的朋友可以了解下2020-11-11Python實(shí)現(xiàn)1-9數(shù)組形成的結(jié)果為100的所有運(yùn)算式的示例
下面小編就為大家?guī)?lái)一篇Python實(shí)現(xiàn)1-9數(shù)組形成的結(jié)果為100的所有運(yùn)算式的示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11