Python數據結構字節和字節數組 --(bytes、bytearray)


bytes、bytearray

  Python3引入兩個新的類型:

    bytes:不可變字節序列 

    bytearray:字節組數據,可變

 

字符串與bytes

  字符串是字符組成的有序序列,字符可以使用編碼來理解

  bytes是字節組成的有序的不可變序列

  bytearray是字節組成的有序可變序列

 

編碼與解碼

  字符串按照不同的字符集編碼encode返回字節序列bytes

    encode(encoding='utf-8') -->bytes

  字節序列按照不同的字符集解碼decode返回字符串

    bytes.decode(encoding='utf-8') --->str 

    bytearray.decode(encoding='utf-8') --->str 

x = 'abc'.encode() #默認字符集為utf-8

print(x)
b'abc'  #輸出結果

y = x.decode()  #解碼  

print(y) 

'abc' 

 

ASCII碼表

一個bytes,有8個bites,存在2**8種狀態,ASCII是美國信息交換標准diamante,是基於拉丁字母的一套單字節編碼系統

 

 

字符串和16進制表示

  字符串‘1’,可以寫成
  x = '1'

  y = '\x31'

  '\x09'表示tab鍵\t   

  '\x0d\x0a' 表示char \r \n 

 

常用的\t \r \n 0~9 A~Z a~z十進制十六進制:

如下是十六進制表示:
c = '\t' #  '\x09' 1個字符 tab鍵

'\r\n' '\x0d0a'    '\0d' ---> \r  '\x0a' --> \n

hex        char
31~39      1~9

41~5A      A~Z 

61~7A      a~z

 

bytes定義

  bytes()表示空bytes,bytes(int)指定字節的bytes,被0填充,示例:bytes(5)  b'\x00\x00\x00\x00\x00'

  bytes(iterable_of_ints) bytes [0~255]的int組成的可迭代對象

  bytes(string,enconding[,error]) -->bytes等價於 string.encode()

  bytes(bytes_or_buffer) ---> immutable copy of bytes_or_buffer 從一個字節序列或buffer中復制一個新的不可變的bytes對象

  使用b 前綴定義:

    只允許基本的ASCII使用字符形式b'abc9'

    使用16進制表示b"\x41\x61"

bytes(range(5))

b'\x00\x01\x02\x03\x04'

bytes(5)
b'\x00\x00\x00\x00\x00'

a = 'abc'.encoding(encoding='uft8)
b = bytes(a)
print(b)
b'abc'

 

bytes操作

  和str類型相似,都是不可變類型,所以很多方法相似,只不過bytes的方法,輸入時bytes,輸出也是bytes

  b'abcde'.replace(b'd',b'D')

  b'abcd'.find(b'b') 

  類方法bytes.fromhex(string):string必須是2個字符的16進制形式

  bytes.fromhex('61 62 63 09 0a 0d')

  輸出:b'abc\t\n\r'

   hex():返回16進制表示的字符串  ‘abc’.encode().hex()   #'616263'

  索引:b'abc'[2] 返回該字節對應的數,int類型 #輸出99 十進制數

 

bytearray定義 

  bytearray()空bytearray,bytearray(int)指定字節的bytearray,被0填充

  bytearray(iterable_of_ints)--->bytearray[0,255]int組成的可迭代對象

   bytearray( bytes_or_buffer) 從一個字節序列或buffer復制出一個新的可變的bytearray對象

    注: b前綴定義的類型是bytes類型

  操作:

    和bytes類型的方法相同:

      bytearray(b'abcd').replace(b'f',b'k')

      bytearrya(b'abc').find(b'b')

    類方法bytearray.fromhex(string)

      sting 必須是2個字符的16進制的形式,'6162 63' ,空格將被忽略!

bytearray.fromhex('6261 63')
#bytearray(b'abc')

bytearray('abc'.encode()).hex() 
#616263

 

bytearray操作

  appnd(int):尾部追加一個元素

  insert(index,int):在指定的索引位置插入一個元素

  extend(iterable_of_ints):將一個可迭代整數集合追加到當前的bytearray

  pop(index=-1):從指定的索引上移除元素,默認從尾部移除

  remove(value):找到第一個value移除,找不到拋異常

  注意:此方法需要使用int型

  clear():清除

  reverse():反轉,就地修改 

 

將數據轉換成字符串則使用str() ,將數據轉換成bytes則使用bytes,對應的是decode encode

data = str(data, encoding='utf-8')
data = bytes(data, encoding='utf-8')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM