字节串和字节数组

【容器类型:】

【字节串bytes 和 字节数组bytearray】

1byte = 8bit
11111111 = 255
最大数0xFF = 255
最小数0x00 = 0

  • 容器类型:
    str 、 list 、 tuple 、 dict 、 set 、 frozenset、bytes、bytearray

  • 字节串(bytes)(不可变的):

  1. 作用:
    存储以字节为单位的数据

  2. 说明:
    字节串是不可变的字节序列
    字节是0~255之间的整数

  3. 字节串的表示方式:

    1. 创建空字节串的字面值:
      b’’
      b""
      b""""""
      B’’
      B""
      B""""""
    2. 创建非空字节串的字面值:
      b’ABCD’
      b’\x41\x41’

    示例:

    >>> b = ''
    >>> b
    ''
    >>> type(b)
    <class 'str'>
    >>> b = b''
    >>> b
    b''
    >>> type(b)
    <class 'bytes'>
    ----------------------
    >>> b'ABCD'
    b'ABCD'
    >>> b'\x41'
    b'A'
    >>> b'\x41\42'
    b'AB'
    -----------------------
    
  4. 字节串的构造函数(bytes):
    bytes() 生成一个空的字节串,等同于 b’’
    bytes(整形可迭代对象) 用可迭代对象初始化一个字节串
    bytes(整数n) 生成n个值为0的字节串
    bytes(字符串,encoding = ‘utf-8’)
    用字符串的转换编码生成一个字节串
    示例:

    >>> bytes([10,20,30,40,50,60,65,66,67,255])
    b'\n\x14\x1e(2<ABC\xff'
    >>> bytes(range(97,97+26))
    b'abcdefghijklmnopqrstuvwxyz'
    >>> bytes(10)
    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
    >>> bytes('hello','ascii')
    b'hello'
    >>> bytes('hello中国','utf-8')
    b'hello\xe4\xb8\xad\xe5\x9b\xbd'
    ---------------------------------------------------------
    
  5. 字节串的运算:
    + += * *=
    < <= >= > == !=
    in/not in
    索引/切片
    示例:

    # 以下是算术运算符
    >>> b = b'abc' + b'123'
    >>> b
    b'abc123'
    >>> b += b'ABC'
    >>> b
    b'abc123ABC'
    # 以下是比较运算符
    >>> b'ABC'<b'ABD'
    True
    # 以下是in/not in 的用法
    >>> b = b'ABCD'
    >>> 65 in b
    True
    >>> # 65就是A的值
    >>> 'A' in b(这样是不可以的)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: a bytes-like object is required, not 'str'
    >>> b'A' in b(这样才可以)
    True
    # 以下是索引
    >>> b = b'ABCD'
    >>> b[0]
    65
    >>> b[1]
    66
    # 以下是切片
    >>> b[1:]
    b'BCD'
    
    ----------------------------------------------------------
    
  6. 字节串的函数:
    len(x) , max(x) , min(x) , sum(x) , all(x) , any(x)

  7. bytes与str的区别:
    bytes 存储字节(0~255)
    str 存储Unicode字符(0~65535)

  8. bytes与str的转换:
    编码(encode)
    str ------------------> bytes

    b = s.encode(‘utf-8’)

    解码(decode)
    bttes ------------------> str
    示例:

    >>> s = 'abc中文'
    >>> len(s)
    5
    >>> b = s.encode('utf-8')
    >>> b
    b'abc\xe4\xb8\xad\xe6\x96\x87'
    >>> s2 = b.decode('utf-8')
    >>> s2
    'abc中文'
    ------------------------------------------
    
  • 字节数组bytearray(是可变的):
    可变的字节序列
  1. 创建字节数组的构造函数:
    bytearray() 创建空的字节数组
    bytearray(整数)
    bytearray(整形可迭代对象)
    bytearray(字符串,encoding = ‘utf-8’)
    注:以上参数等同于字节串
    示例:

    >>> bytearray()
    bytearray(b'')
    >>> bytearray(10)
    bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
    >>> bytearray([65,66,67])
    bytearray(b'ABC')
    >>> bytearray(b'hello')
    bytearray(b'hello')
    
    
  2. 字节数组的运算:
    + += * *=
    < <= > >= == !=
    in/not in
    索引/切片(字节数组支持索引和切片赋值,规则与列表相同)
    示例:

    >>> ba = bytearray(b'helllo')
    >>> ba[0] = 72
    >>> ba
    bytearray(b'Helllo')
    >>> ba[::2] = [65,66,67]
    >>> ba
    bytearray(b'AeBlCo')
    
  3. bytearray的方法:
    B.clear() 清空字节数组
    B.append(n) 追加一个字节(n为0~255的整数)
    B.remove(value) 删除第一个出现的字节,如果没有出现,则产生ValueError错误
    B.reverse() 字节的顺序进行反转
    B.decode(encoding = ‘utf-8’) # 解码
    B.find(sub[,start[,end]]) 查找

字节串和字节数组字节串和字节数组 雨醉东风 发布了79 篇原创文章 · 获赞 2 · 访问量 4899 私信 关注
上一篇:struct--二进制数据结构的打包与解包


下一篇:字符串输出和深浅复制