zoukankan      html  css  js  c++  java
  • bytes和bytearray

    python - Bytes和Bytearray

    标签(空格分隔): python-数据结构


    bytes、bytearray

    • [x] python3 引入两个新的类型

      • [x] bytes
        • 不可变字节序列
      • [x] bytearry
        • 字节数组
        • 可变
    • [x] 字符串与bytes

      • 字符串是字符组成的有序序列,字符可以使用编码来理解
      • bytes是字节组成的有序的不可变序列
      • bytearray是字节组成的有序的可变序列
    • [x] 编码和解码

      • 字符串按照不同的字符集编码 encode 返回字节序列 bytes
        • encode(encoding="utf-8", error="strict") --> bytes
      • 字节序列按照不同的字符集解码 decode 返回字符串
        • bytes.decode(encoding="utf-8", error="strict") --> str
        • bytearray.decode(encoding="utf-8", error="strict") --> str

    • [x] bytes定义

      • bytes() 空 bytes
      • bytes(int) 指定字节的bytes,被 0 填充
      • bytes(iterable_of_in) --> bytes [0, 255] 的int组成的可迭代对象
      • bytes(string, encoding[, errors]) -> bytes 等价于 string.encode()
      • bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer 从一个字节序列或者buffer复制除一个新的不可变的bytes对象
      • 使用 b前缀定义
        • 只允许 基本的 ASCII 使用字符形式 b"abc9"
        • 使用十六进制表示 b"x41x61"
    • [x] bytes 操作

      和str类型类似,都是不可变类型,所以方法很多都一样,只不过bytes的方法,输入是bytes,输出也是 bytes

      >>> b"abc".find(b"b")
      ... 1
      >>> b"abcdef".replace(b"f", b"123")
      ... b'abcde123'
      
      • [x] 类方法 bytes.fromhex(string) ---> bytes

        • string 必须是 2 个字符的 16进制的形式, "6162 6a 6b",空格将被忽略
        >>> bytes.fromhex("6162 6a 6b")
        ... b'abjk'
        >>> bytes.fromhex("6162 6a 6b").decode()
        ... 'abjk'
        >>> "中".encode()
        ... b'xe4xb8xad'
        >>> bytes.fromhex("e4b8ad")
        ... b'xe4xb8xad'
        >>> bytes.fromhex("e4b8ad").decode()
        ... '中'
        >>> "{:X}{:X}{:X}".format(*"中".encode())
        ... 'E4B8AD'
        >>> bytes.fromhex("{:X}{:X}{:X}".format(*"中".encode()))
        ... b'xe4xb8xad'
        >>> bytes.fromhex("{:X}{:X}{:X}".format(*"中".encode())).decode()
        ... '中'
        
      • [x] hex() ---> int

      • 返回 16 进制表示的字符串

        >>> "abc".encode().hex()
        ... '616263'
        >>> "中".encode().hex()
        ... 'e4b8ad'
        >>> bytes.fromhex("中".encode().hex())
        ... b'xe4xb8xad'
        >>> bytes.fromhex("中".encode().hex()).decode()
        ... '中'
        

    • [x] bytearray 定义

      • bytearray()bytearray
      • bytearray(int) 指定字节的bytearray,被 0 填充
      • bytearray(iterable_of_in) --> bytearray [0, 255] 的int组成的可迭代对象
      • bytearray(string, encoding[, errors]) -> bytearray 近似于 string.encode(),不过返回可变的对象
      • bytearray(bytes_or_buffer) -> immutable copy of bytes_or_buffer 从一个字节序列或者buffer复制除一个新的不可变的bytearray对象

      注意: b 前缀定义的类型是 bytes类型的

    • [x] bytearray 操作

      和 bytes 类型的方法相同

      >>> bytearray(b"abc").find(b"b")
      ... 1
      >>> bytearray(b"abcdef").replace(b"f", b"123")
      ... bytearray(b'abcde123')
      
      • [x] 类方法 bytearray.fromhex(string) ---> bytearray

        • string 必须是 2 个字符的 16进制的形式, "6162 6a 6b",空格将被忽略
        >>> bytearray.fromhex("6162 6a 6b")
        ... bytearray(b'abjk')
        >>> bytearray.fromhex("6162 6a 6b").decode()
        ... 'abjk'
        >>> "中".encode()
        ... b'xe4xb8xad'
        >>> bytearray.fromhex("e4b8ad")
        ... bytearray(b'xe4xb8xad')
        >>> bytearray.fromhex("e4b8ad").decode()
        ... '中'
        >>> "{:X}{:X}{:X}".format(*"中".encode())
        ... 'E4B8AD'
        >>> bytearray.fromhex("{:X}{:X}{:X}".format(*"中".encode()))
        ... bytearray(b'xe4xb8xad')
        >>> bytearray.fromhex("{:X}{:X}{:X}".format(*"中".encode())).decode()
        ... '中'
        
      • [x] hex() ---> int

      • 返回 16 进制表示的字符串

      • [x] 索引 ---> int
        bytearray(b"abcdef")[2] 返回改字节对应的数,int 类型

        >>> bytearray(b"abcdef")[2]
        ... 99
        

      • [x] append(int) 尾部追加一个元素
      • [x] insert(index,int) 在指定索引位置上插入元素
      • [x] extend(iterable_int) 将一个可迭代的整数集合追加到当前的 bytearry
      • [x] pop(index=-1) 从指定索引上移除元素,默认从尾部移除
      • [x] remove(value) 找到一个value移除,找不到 则 ValueError 异常

      上述方法中若要使用int类型,值必须在 [0, 255] 之间

      • [x] clear() 清空 bytearry
      • [x] reverse() 翻转 bytearry ,就地修改
  • 相关阅读:
    2020软件工程作业02
    2020软件工程作业01
    为什么需要平衡二叉树?
    手机号码和邮箱等联系地址,为什么不明文显示?
    请把重要的事看轻 ——2017年终总结
    万事皆空:随缘而定
    微服务:微服务架构模式译文说明
    Mysql 查询—按位运算
    解决:spring security 登录页停留时间过长 跳转至 403页面
    excel模板解析—桥接模式:分离解析模板和业务校验
  • 原文地址:https://www.cnblogs.com/jingru-QAQ/p/11405626.html
Copyright © 2011-2022 走看看