Python字節(jié)串類型bytes及用法
一、bytes 字節(jié)串類型概述
Python 3 新增了 bytes 類型,用于代表字節(jié)串,是一個(gè)類型,不是C#中的列表。
由于 bytes 保存的就是原始的字節(jié)(二進(jìn)制格式)數(shù)據(jù),因此 bytes 對(duì)象可用于在網(wǎng)絡(luò)上傳輸數(shù)據(jù),也可用于存儲(chǔ)各種二進(jìn)制格式的文件,比如圖片、音樂(lè)等文件。
1、字節(jié)串與字符串之間的區(qū)別
bytes 和 str 除操作的數(shù)據(jù)單元不同之外,它們支持的所有方法都基本相同,bytes 也是不可變序列。
- 字符串(str)由多個(gè)字符組成,以字符為單位進(jìn)行操作;
- 字節(jié)串(bytes)由多個(gè)字節(jié)組成,以字節(jié)為單位進(jìn)行操作。
2、字節(jié)概述
計(jì)算機(jī)底層有兩個(gè)基本概念:位(bit)和字節(jié)(Byte),其中
- bit 代表 1 位,要么是 0,要么是 1;
- Byte 代表 1 字節(jié),1 字節(jié)包含 8 位。
在字節(jié)串中每個(gè)數(shù)據(jù)單元都是字節(jié),也就是 8 位,其中每 4 位(相當(dāng)于 4 位二進(jìn)制數(shù),最小值為 0 ,最大值為 15)可以用一個(gè)十六進(jìn)制數(shù)來(lái)表示,因此每字節(jié)需要兩個(gè)十六進(jìn)制數(shù)表示,
b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b', # 比如 :\xe6 就表示 1 字節(jié),其中 \x 表示十六進(jìn)制,e6 就是兩位的十六進(jìn)制數(shù)。
Unicode 字符集,包括漢字,為兩個(gè)字節(jié)(16 位,支持 65536 個(gè)字符編號(hào))。實(shí)際使用的 UTF-8, UTF-16 等其實(shí)都屬于 Unicode 字符集。
二、字節(jié)串與字符串之間的轉(zhuǎn)換
bytes 對(duì)象只負(fù)責(zé)以字節(jié)(二進(jìn)制格式)序列來(lái)記錄數(shù)據(jù),至于這些數(shù)據(jù)到底表示什么內(nèi)容,完全由程序決定。如果采用合適的字符集,字符串可以轉(zhuǎn)換成字節(jié)串;反過(guò)來(lái),字節(jié)串也可以恢復(fù)成對(duì)應(yīng)的字符串。
1、將一個(gè)字符串轉(zhuǎn)換成 bytes 對(duì)象
如果希望將一個(gè)字符串轉(zhuǎn)換成 bytes 對(duì)象,有如下三種方式:
下面程序中 b1~b5 都是字節(jié)串對(duì)象,該程序示范了以不同方式來(lái)構(gòu)建字節(jié)串對(duì)象。其中 b2、b3 都是直接在 ASCII 字符串前添加b前綴來(lái)得到字節(jié)串的:b4 調(diào)用 bytes() 函數(shù)來(lái)構(gòu)建字節(jié)串;而 b5 則調(diào)用字符串的 encode 方法來(lái)構(gòu)建字節(jié)串。
- 如果字符串內(nèi)容都是 ASCII 字符,則可以通過(guò)直接在字符串之前添加 b 來(lái)構(gòu)建字節(jié)串值。
# 創(chuàng)建一個(gè)空的bytes b1 = bytes() # 創(chuàng)建一個(gè)空的bytes值 b2 = b'' # 1、通過(guò)b前綴指定hello是bytes類型的值 b3 = b'hello' print(b3) print(b3[0]) print(b3[2:4]) #b'hello' #104 #b'll'
- 調(diào)用 bytes() 函數(shù)(其實(shí)是 bytes 的構(gòu)造方法)將字符串按指定字符集轉(zhuǎn)換成字節(jié)串,
如果不指定字符集,默認(rèn)使用 UTF-8 字符集。
# 調(diào)用bytes方法將字符串轉(zhuǎn)成bytes對(duì)象
b4 = bytes('我愛(ài)Python編程',encoding='utf-8')
print(b4)
#b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b'- 調(diào)用字符串本身的encode() 方法將字符串按指定字符集轉(zhuǎn)換成字節(jié)串(常用)
如果不指定字符集,默認(rèn)使用 UTF-8 字符集。
# 利用字符串的encode()方法編碼成bytes,默認(rèn)使用utf-8字符集
b5 = "學(xué)習(xí)Python很有趣".encode('utf-8')
print(b5)
#b'\xe5\xad\xa6\xe4\xb9\xa0Python\xe5\xbe\x88\xe6\x9c\x89\xe8\xb6\xa3'從上面的輸出結(jié)果可以看出,字節(jié)串和字符串非常相似,只是字節(jié)串里的每個(gè)數(shù)據(jù)單元都是 1 字節(jié)。
2、decode():將一個(gè)bytes 對(duì)象轉(zhuǎn)換成字符串
如果程序獲得了 bytes 對(duì)象,也可調(diào)用 bytes 對(duì)象的 decode() 方法將其解碼成字符串,
#將bytes 對(duì)象解碼成字符串,默認(rèn)使用UTF-8進(jìn)行解碼
st = b5.decode('utf-8')
print(st)#學(xué)習(xí)Python很有趣到此這篇關(guān)于Python字節(jié)串類型bytes及用法的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
pip安裝Python庫(kù)時(shí)遇到的問(wèn)題及解決方法
這篇文章主要介紹了pip安裝Python庫(kù)時(shí)遇到的問(wèn)題及解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11
python中requests使用代理proxies方法介紹
這篇文章主要介紹了python中requests使用代理proxies方法介紹,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10
在PyCharm中控制臺(tái)輸出日志分層級(jí)分顏色顯示的方法
今天小編就為大家分享一篇在PyCharm中控制臺(tái)輸出日志分層級(jí)分顏色顯示的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
Python Numpy實(shí)現(xiàn)計(jì)算矩陣的均值和標(biāo)準(zhǔn)差詳解
NumPy(Numerical Python)是Python的一種開(kāi)源的數(shù)值計(jì)算擴(kuò)展。這種工具可用來(lái)存儲(chǔ)和處理大型矩陣,比Python自身的嵌套列表結(jié)構(gòu)要高效的多。本文主要介紹用NumPy實(shí)現(xiàn)計(jì)算矩陣的均值和標(biāo)準(zhǔn)差,感興趣的小伙伴可以了解一下2021-11-11
Pycharm連接遠(yuǎn)程mysql報(bào)錯(cuò)的實(shí)現(xiàn)
本文主要介紹了Pycharm連接遠(yuǎn)程mysql報(bào)錯(cuò)的實(shí)現(xiàn),文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
Pearson相關(guān)系數(shù)和Spearman相關(guān)系數(shù)的區(qū)別及說(shuō)明
這篇文章主要介紹了Pearson相關(guān)系數(shù)和Spearman相關(guān)系數(shù)的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
python單機(jī)五子棋的代碼實(shí)現(xiàn)示例
五子棋是經(jīng)典的棋牌類游戲,很多人都玩過(guò),那么如何用Python實(shí)現(xiàn)五子棋呢,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10

