您好,登錄后才能下訂單哦!
bytes:可以看作是一組二進制數值(0-255) 的 str 序列
bytearray :可以看作是一組二進制數值(0-255) 的 list 序列
字符串轉bytes類型
# 將返回 bytes 類型 b" abc "
bs1 = bytes("abc","utf-8")
# 可以使用字符的16進制字符表達形式
bs2 = bytes('\x61\x62\x63',"utf-8")
# 直接對字符進行編碼成二進制形式
bs2 = "abc".encode()
# 16進制字符轉為bytes類型
b1 = bytes.fromhex("61 62 63") # ==> b"abc" "61,62"是兩位16進制數組合,該值不能超過 7F ,否則無法對應ASCII表中字符
b1.hex() # ===> '616263' ASCII碼中abc字符對應的16進制數組成的字符串,上面函數的逆運算
# bytes 類型中單個元素可以看做是一個10進制數值類型
print( b1[0] ) # ==> 10進制數,97
數值轉化為bytes類型
前面已經說過,bytes 對象可以看做是一組二進制數值(0-255)的字符串,所以可以根據數值創建bytes 對象
# 傳入數值類型可迭代對象
b1 = bytes(range(97,100)) # ==> b' abc '
b2 = bytes( [97,98,99] ) # ==> b' abc '
b3 = bytes( [97] ) # ==> b' a '
# 直接傳入10進制數值對象而不是可迭代對象,將會生成對應數值字節的空bytes
b4 = bytes(3) # b'\x00\x00\x00' 三個空字符的 bytes
# 通過數值轉化將8進制,16進制數字 生成bytes對象
b5 = bytes( [ int("61",16) ] ) #16進制 == > 10 進制 ==> bytes ==>b"a"
b6 = bytes( [ int("61", 8) ] ) # 8進制 == > 10 進制 ==> bytes ==>b"1"
# 也可利用bytes 對象轉化為 10 進制 數值
num = int.from_bytes(b"abc","big") # "abc"對應的三個字節拼接在一起作為一個二進制數,并計算為10進制數輸出
num # ===> 6382179
bytes 對象可以可以理解為字節的 str 類型,序列一旦創建不可變,同時,字符串類型可以使用的方法,基本適用于bytes對象。
例如
m = bytes("abc","utf-8")
n = bytearray(" def ","utf-8")
bs = m + n # bytes 類型的拼接,生成新的bytes對象
bs # ===> b"abcdef"
m.append(100) # ==> 通過 10進制數,添加 b" d ", 單個值使用整型數值進行傳入
m.extend(b"efg") # ==> 擴展bytearray對象使用 bytes或bytearray類型的可迭代對象
其他字符串方法類似于str ,可查看 str 類型使用方法
bytearray 可以看作是一組數值(0-256)(二進制) 的 list 序列,意味著bytearray 中的單個元素是可變的
ba1 = bytearray(range(97,103))
ba1 # bytearay對象,==> bytearray(b"abcdef" )
ba1[0] # ==> 97 (integer)
ba1[1 :2] # 切片 ==> bytearray(b'bcd')
# 賦值,可變bytearray
ba[ 4 ] = 122 # 122整型對應字符"z", ==> b"e" --> b"z"
ba # bytearray(b"abcdzf" )
ba1[1:4] = b"xyz" # 切片賦值,替換ba1[1:4]的內容, 只有bytes 或bytearray 序列可賦值
ba1 # bytearray(b'axyzef')
bytearay 對象類似于 一個字節 的 list 對象,所以可以使用list 的大部分方法,注意的是,list 對象是對字符層面的操作,bytes 和 bytearay 則需要操作的是字節層面的元素,或者整型(因為0-255的整型值可以直接使用二進制形式存入內存的單個字節中,也屬于單個字節操作)
bytes對象生成時可以根據16進制字符串(無前綴)或者10進制 數值,可以使用以下方法轉換各個進制字符
# 內置函數
chr(97) # ==> "a"
ord("a") # ==> 97
#帶前綴 0x
format(97,"#x") # ==> '0x61'
format(97,"#o") # 8進制字符
format(97,"#b") # 2進制字符
#不帶前綴
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'
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。