bytes:可以看作是一組二進(jìn)制數(shù)值(0-255) 的 str 序列
bytearray:可以看作是一組二進(jìn)制數(shù)值(0-255) 的 list 序列
字符串轉(zhuǎn)bytes類型
# 將返回 bytes 類型 b" abc "
bs1 = bytes("abc","utf-8")
# 可以使用字符的16進(jìn)制字符表達(dá)形式
bs2 = bytes('\x61\x62\x63',"utf-8")
# 直接對(duì)字符進(jìn)行編碼成二進(jìn)制形式
bs2 = "abc".encode()
# 16進(jìn)制字符轉(zhuǎn)為bytes類型
b1 = bytes.fromhex("61 62 63") # ==> b"abc" "61,62"是兩位16進(jìn)制數(shù)組合,該值不能超過 7F ,否則無法對(duì)應(yīng)ASCII表中字符
b1.hex() # ===> '616263' ASCII碼中abc字符對(duì)應(yīng)的16進(jìn)制數(shù)組成的字符串,上面函數(shù)的逆運(yùn)算
# bytes 類型中單個(gè)元素可以看做是一個(gè)10進(jìn)制數(shù)值類型
print( b1[0] ) # ==> 10進(jìn)制數(shù),97
數(shù)值轉(zhuǎn)化為bytes類型
前面已經(jīng)說過,bytes 對(duì)象可以看做是一組二進(jìn)制數(shù)值(0-255)的字符串,所以可以根據(jù)數(shù)值創(chuàng)建bytes 對(duì)象
# 傳入數(shù)值類型可迭代對(duì)象
b1 = bytes(range(97,100)) # ==> b' abc '
b2 = bytes( [97,98,99] ) # ==> b' abc '
b3 = bytes( [97] ) # ==> b' a '
# 直接傳入10進(jìn)制數(shù)值對(duì)象而不是可迭代對(duì)象,將會(huì)生成對(duì)應(yīng)數(shù)值字節(jié)的空bytes
b4 = bytes(3) # b'\x00\x00\x00' 三個(gè)空字符的 bytes
# 通過數(shù)值轉(zhuǎn)化將8進(jìn)制,16進(jìn)制數(shù)字 生成bytes對(duì)象
b5 = bytes( [ int("61",16) ] ) #16進(jìn)制 == > 10 進(jìn)制 ==> bytes ==>b"a"
b6 = bytes( [ int("61", 8) ] ) # 8進(jìn)制 == > 10 進(jìn)制 ==> bytes ==>b"1"
# 也可利用bytes 對(duì)象轉(zhuǎn)化為 10 進(jìn)制 數(shù)值
num = int.from_bytes(b"abc","big") # "abc"對(duì)應(yīng)的三個(gè)字節(jié)拼接在一起作為一個(gè)二進(jìn)制數(shù),并計(jì)算為10進(jìn)制數(shù)輸出
num # ===> 6382179
bytes 對(duì)象可以可以理解為字節(jié)的 str 類型,序列一旦創(chuàng)建不可變,同時(shí),字符串類型可以使用的方法,基本適用于bytes對(duì)象。
例如
m = bytes("abc","utf-8")
n = bytearray(" def ","utf-8")
bs = m + n # bytes 類型的拼接,生成新的bytes對(duì)象
bs # ===> b"abcdef"
m.append(100) # ==> 通過 10進(jìn)制數(shù),添加 b" d ", 單個(gè)值使用整型數(shù)值進(jìn)行傳入
m.extend(b"efg") # ==> 擴(kuò)展bytearray對(duì)象使用 bytes或bytearray類型的可迭代對(duì)象
其他字符串方法類似于str ,可查看 str 類型使用方法
bytearray 可以看作是一組數(shù)值(0-256)(二進(jìn)制) 的 list 序列,意味著bytearray 中的單個(gè)元素是可變的
ba1 = bytearray(range(97,103))
ba1 # bytearay對(duì)象,==> bytearray(b"abcdef" )
ba1[0] # ==> 97 (integer)
ba1[1 :2] # 切片 ==> bytearray(b'bcd')
# 賦值,可變bytearray
ba[ 4 ] = 122 # 122整型對(duì)應(yīng)字符"z", ==> b"e" --> b"z"
ba # bytearray(b"abcdzf" )
ba1[1:4] = b"xyz" # 切片賦值,替換ba1[1:4]的內(nèi)容, 只有bytes 或bytearray 序列可賦值
ba1 # bytearray(b'axyzef')
bytearay 對(duì)象類似于 一個(gè)字節(jié) 的 list 對(duì)象,所以可以使用list 的大部分方法,注意的是,list 對(duì)象是對(duì)字符層面的操作,bytes 和 bytearay 則需要操作的是字節(jié)層面的元素,或者整型(因?yàn)?-255的整型值可以直接使用二進(jìn)制形式存入內(nèi)存的單個(gè)字節(jié)中,也屬于單個(gè)字節(jié)操作)
bytes對(duì)象生成時(shí)可以根據(jù)16進(jìn)制字符串(無前綴)或者10進(jìn)制 數(shù)值,可以使用以下方法轉(zhuǎn)換各個(gè)進(jìn)制字符
# 內(nèi)置函數(shù)
chr(97) # ==> "a"
ord("a") # ==> 97
#帶前綴 0x
format(97,"#x") # ==> '0x61'
format(97,"#o") # 8進(jìn)制字符
format(97,"#b") # 2進(jìn)制字符
#不帶前綴
format(97,"X") # ==> int ==> hex_str
format(97,"o") # ==> int ==> oct_str
format(97,"b") # ==> int ==> bin_str
# 3.6+版本使用方法
# f'{255:X}' 和 f'{255:#X}' ===> " FF " 和 "0xFF"
# 無前綴
"%x"%10 # ==> 'a'
"%o"%10 # ==> '12'
# 帶前綴
"%#x"%10 # ==> '0xa'
"%#o"%10 # ==> '0o12'
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
文章名稱:python數(shù)據(jù)類型——bytes和bytearray-創(chuàng)新互聯(lián)
分享路徑:http://jinyejixie.com/article44/dpphhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、關(guān)鍵詞優(yōu)化、動(dòng)態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、云服務(wù)器、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)