bytes:能夠看做是一組二進制數值(0-255) 的 str 序列
bytearray :能夠看做是一組二進制數值(0-255) 的 list 序列python
字符串轉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 對象app
# 傳入數值類型可迭代對象 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對象。
例如 ide
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的整型值能夠直接使用二進制形式存入內存的單個字節中,也屬於單個字節操做)code
bytes對象生成時能夠根據16進制字符串(無前綴)或者10進制 數值,能夠使用如下方法轉換各個進制字符orm
# 內置函數 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'