当前位置:首页 > Python > 正文

Python字节数组详解(深入理解bytes与bytearray的用法)

Python字节数组 编程中,处理二进制数据是一项常见但又容易被初学者忽视的重要技能。无论是读取文件、网络通信,还是加密解密操作,都离不开对 bytesbytearray 类型的理解和使用。本文将从零开始,带你全面掌握 Python二进制数据处理 的核心知识。

Python字节数组详解(深入理解bytes与bytearray的用法) Python字节数组  bytes类型 bytearray用法 Python二进制数据处理 第1张

什么是字节(Byte)?

在计算机中,所有数据最终都以二进制形式存储。一个字节(Byte)由8个比特(bit)组成,可以表示0到255之间的整数。Python 提供了两种用于处理字节序列的内置类型:bytes(不可变)和 bytearray(可变)。

1. bytes 类型(不可变字节数组)

bytes 是一个不可变的字节序列。一旦创建,就不能修改其内容。它常用于表示原始二进制数据,比如从文件或网络读取的数据。

创建 bytes 对象

# 方法1:通过字符串编码创建b1 = b'hello'b2 = '你好'.encode('utf-8')# 方法2:通过整数列表创建(每个整数必须在0~255之间)b3 = bytes([72, 101, 108, 108, 111])# 方法3:创建指定长度的空字节序列(初始化为0)b4 = bytes(5)  # 结果为 b'\x00\x00\x00\x00\x00'print(b1)  # b'hello'print(b2)  # b'\xe4\xbd\xa0\xe5\xa5\xbd'print(b3)  # b'Hello'print(b4)  # b'\x00\x00\x00\x00\x00'

访问与切片

b = b'Python'print(b[0])      # 输出 80('P' 的 ASCII 值)print(b[1:4])    # 输出 b'yth'print(len(b))    # 输出 6
注意:bytes 是不可变的,尝试修改会报错:b[0] = 70 将引发 TypeError

2. bytearray 类型(可变字节数组)

bytes 不同,bytearray 是可变的,这意味着你可以修改其中的元素。这在需要动态构建或修改二进制数据时非常有用。

创建 bytearray 对象

# 方法1:从字符串编码创建ba1 = bytearray('hello', 'utf-8')# 方法2:从整数列表创建ba2 = bytearray([72, 101, 108, 108, 111])# 方法3:创建指定长度的空 bytearrayba3 = bytearray(3)print(ba1)  # bytearray(b'hello')print(ba2)  # bytearray(b'Hello')print(ba3)  # bytearray(b'\x00\x00\x00')

修改 bytearray 内容

ba = bytearray(b'Python')ba[0] = 74          # 修改第一个字节为 'J'(ASCII 74)ba.append(33)       # 添加感叹号(ASCII 33)print(ba)           # bytearray(b'Jython!')# 还可以使用 extend()、remove() 等方法ba.extend(b' World')print(ba)           # bytearray(b'Jython! World')

3. bytes 与 bytearray 的转换

两者之间可以轻松相互转换:

# bytearray 转 bytesba = bytearray(b'hello')b = bytes(ba)print(type(b))  # # bytes 转 bytearrayb = b'world'ba = bytearray(b)print(type(ba))  # 

4. 实际应用场景

在以下场景中,你会频繁使用 bytearray用法bytes

  • 读写二进制文件(如图片、音频、视频)
  • 网络协议解析(如 HTTP、TCP 数据包)
  • 加密/解密操作(如 AES、RSA)
  • 与 C 语言扩展或硬件设备通信

示例:读取图片文件

# 以二进制模式读取图片with open('photo.jpg', 'rb') as f:    data = f.read()  # data 是 bytes 类型# 修改部分字节(例如添加水印标记)ba = bytearray(data)ba[10:15] = b'WATER'# 写回新文件with open('photo_watermarked.jpg', 'wb') as f:    f.write(ba)

总结

掌握 Python字节数组 的使用,是进阶 Python 开发的关键一步。bytes 适用于只读的二进制数据,而 bytearray 则适合需要动态修改的场景。理解它们的区别与联系,能让你在处理 Python二进制数据处理 任务时更加得心应手。

希望这篇教程能帮助你彻底搞懂 bytearray用法bytes 的核心概念。动手实践是掌握知识的最佳方式,快去写几行代码试试吧!