python内置函数bytes、bytearray

一、bytes、bytearry

  • python3版本引入两个新类型
  • bytes: 不可变字节序列
  • bytearry:字节数组,可变

二、字符串与bytes

  • 字符串是字符组成的有序序列,字符可以使用编码(ASCII)来理解
  • bytes是字节组成的有序不可变序列
  • bytearry是字节组成的有序可变序列

三、编码与解码

  • 编码:字符串按照不同的字符集编码encode返回字节序列bytes
  •    encode(encoding='utf-8',error='strict')
  • 解码:字节序列按照不同的字符集解码decode返回字符串
  • 举例:
    • 编码字符串‘abc’

      >>> bytes('abc','UTF8')

      b'abc'

      编码字符串‘abc’

      >>> a = 'abc'.encode()

      >>> a

      b'abc'

      >>> type(a)

      <class 'bytes'>

      解码字符串'abc'

      >>> a.decode()

      'abc'

      >>> a

      b'abc'

      影子拷贝

      >>> b = bytes(a)

      >>> b

      b'abc'

      实际比较a和b的值

      >>> id(a) == id(b)

      True

      实际比较内存id

      >>> id(a) is id(b)

      False

      >>> 

四、bytes定义

  • bytes() 空bytes
  • bytes(string,encoding) 返回bytes类型,等价于string.encode()
  • bytes(bytes_or_buffer) 从一个字节序列或者buffer复制出一个新的不可变的bytes对象
  • 使用b前缀定义,只允许基本ASCII使用字符形式,如b'abc'

五、bytes操作

  • 和字符串str类型操作类似,都是不可变类型,所以方法很多都是一样,只不过bytes的方法,输入时bytes,输出是bytes
  • a.encode().hex() 返回16进制的字符串
  • 索引访问:a[2] 返回该字节对应的ACSII对应的数,int类型
  • bytearray和bytes操作一样
  • 举例:
  • >>> a = b'abcdef'

    >>> a.replace(b'f', b'k')

    b'abcdek'

    >>> a.find(b'b')

    1

    >>>

  切割

  >>> a = b'abcdef'

  >>> a.split(b'b')

  [b'a', b'cdef']

  

  >>> 'abc'.encode().hex() 十六进制

  '616263'

  索引访问

  >>> a[2] 对应的编码数字

  99