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