Python 之 bytes/bytearray 的深入浅出

本文详细介绍了Python3中的bytes和bytearray类型,包括它们的性质、ASCII编码、与字符串的关系、编码解码过程。此外,还探讨了常见的操作如从hex转换、索引、追加、插入等,并解释了字节序的概念及其在不同平台上的应用。
摘要由CSDN通过智能技术生成

1、前言

1.1 Python3 引入两个新类型

  • bytes : 不可变字节序列
  • bytearray : 可变的字节数组

1.2 ASCII

  • ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准
  • ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符
  • 32~126(共95个)是字符(32是空格)
  • 48~57为0到9十个阿拉伯数字
  • 65~90为26个大写英文字母
  • 97~122号为26个小写英文字母
  • '\t\n\r'.encode().hex() # '090a0d'

1.3 字符串与bytes bytearray

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

1.4 编码与解码

  • 字符串按照不同的字符集编码encode返回字节序列bytes

    bytes('abc', encoding='utf-8', errors='strict')
    # b'abc'
    '123'.encode(encoding='utf-8', errors='strict')
    # b'123'
    bytearray('abc', encoding='utf-8', errors='strict')
    # bytearray(b'abc')
    
  • 字节序列按照不同的字符集解码decode返回值字符串

    b'123'.decode(encoding='utf-8', errors='strict')
    # '123'
    bytearray(b'abc').decode(encoding='utf-8', errors='strict')
    # 'abc'
    
  • 示例

    '中国2021加油'.encode(encoding='utf-8')
    # b'\xe4\xb8\xad\xe5\x9b\xbd2021\xe5\x8a\xa0\xe6\xb2\xb9'
    
    '中国2021加油'.encode(encoding='utf-8').hex()
    # 'e4b8ade59bbd32303231e58aa0e6b2b9'
    
    '中国2021加油'.encode(encoding='gbk')
    # b'\xd6\xd0\xb9\xfa2021\xbc\xd3\xd3\xcd'
    
    a = b'\xe4\xb8\xad\xe5\x9b\xbd2021\xe5\x8a\xa0\xe6\xb2\xb9'
    a.decode(encoding='utf-8')
    # '中国2021加油'
    
    a.decode(encoding='gbk')
    # UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 2: illegal multibyte sequence
    
    b = 'a\tb\t\tc\n\rd'
    print(b)  # 普通打印,无法看出空格,可以使用编码后查看
    # a	 b		c
    # d
    print(b.encode())
    # b'a\tb\t\tc\n\rd'
    print(b.encode().hex())
    # 6109620909630a0d64
    print(bytes.fromhex(b.encode().hex()))
    # b'a\tb\t\tc\n\rd'
    
    b = '中国'
    print(b)  
    # 中国
    print(b.encode())
    # b'\xe4\xb8\xad\xe5\x9b\xbd'
    print(b.encode().hex())
    # e4b8ade59bbd
    print(bytes.fromhex(b.encode().hex()))
    # b'\xe4\xb8\xad\xe5\x9b\xbd'
    print(bytes.fromhex(b.encode().hex()).decode())
    # 中国
    

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值