【python学习】bytearray 数组

在Python中,bytearray 是一个可变序列,用于表示一个字节数组。与不可变的 bytes 类型相比,bytearray 允许你修改其内容。你可以通过索引来访问和修改 bytearray 中的元素,也可以添加或删除元素。

使用 bytearray 的一些示例:

python 复制代码
# 创建一个空的 bytearray

ba = bytearray()

print(ba) # 输出: bytearray(b'')



# 创建一个包含初始值的 bytearray

ba = bytearray([0x11, 0x22, 0x33])

print(ba) # 输出: bytearray(b'\x11\x22\x33')



# 访问 bytearray 中的元素

print(ba[0]) # 输出: 17(0x11 的十进制表示)



# 修改 bytearray 中的元素

ba[1] = 0x44

print(ba) # 输出: bytearray(b'\x11D\x33'),其中 'D' 是 0x44 的 ASCII 字符



# 添加元素到 bytearray 的末尾

ba.append(0x55)

print(ba) # 输出: bytearray(b'\x11D\x33U'),其中 'U' 是 0x55 的 ASCII 字符



# 从 bytearray 中删除元素

del ba[2]

print(ba) # 输出: bytearray(b'\x11D\x55')



# 将 bytes 转换为 bytearray

b = b'\x01\x02\x03'

ba = bytearray(b)

print(ba) # 输出: bytearray(b'\x01\x02\x03')



# 将 bytearray 转换为 bytes

b = bytes(ba)

print(b) # 输出: b'\x01\x02\x03'

在上面的示例中,你可以看到如何使用 bytearray 来存储和操作字节序列。这对于需要频繁修改字节数据的场景特别有用,因为 bytes 类型是不可变的,每次修改都需要创建一个新的 bytes 对象。而 bytearray 允许你原地修改数据,从而提高性能。

数组的长度:

python 复制代码
# 创建一个bytearray  
app_buf = bytearray([0x11, 0x22, 0x33])  
  
# 输出bytearray的长度  
print(len(app_buf))  # 输出: 3

数组打印

注意:如果数组里的内容为 字符直接用print 打印就会直接打印成字符!例如

ba1 = 0x44 print(ba) # 输出: bytearray(b'\x11D\x33'),其中 'D' 是 0x44 的 ASCII 字符

十六进制方式打印数组

要以十六进制的方式打印bytearray中的每个字节,你可以使用列表推导式(list comprehension)结合format函数或f-string(格式化字符串字面量)来格式化每个字节。以下是一些示例:

使用循环和直接打印

python 复制代码
app1_buf = bytearray([0x11,0x23,0x63])
for byte in app1_buf:
    print(f"{byte:02X}", end=' ')

使用列表推导式和format函数

python 复制代码
app_buf = bytearray([0x11, 0x22, 0x33]) 
hex_values = ['{:02X}'.format(byte) for byte in app_buf] 
print(' '.join(hex_values)) # 输出: 11 22 33

使用列表推导式和f-string(Python 3.6+)

python 复制代码
app_buf = bytearray([0x11, 0x22, 0x33])

hex_values = [f'{byte:02X}' for byte in app_buf]

print(' '.join(hex_values)) # 输出: 11 22 33

在这两个示例中,我们都创建了一个列表推导式来遍历bytearray中的每个字节,并使用format函数或f-string将其格式化为两位的十六进制字符串。然后,我们使用join方法将这些字符串连接成一个用空格分隔的字符串,并打印出来。

十进制打印数组

如果你想要以十进制的方式打印bytearray中的每个字节,你可以直接遍历bytearray并打印每个字节的值,因为Python在默认情况下会以十进制打印小的整数。但是,如果你想要确保它们是作为十进制数明确显示的(特别是当与其他数据混合时),你可以使用format函数或f-string来指定格式。

以下是一些示例:

使用循环和直接打印

python 复制代码
app_buf = bytearray([0x11, 0x22, 0x33]) 
for byte in app_buf: 
print(byte) # 直接打印,默认为十进制 
# 输出: 
# 17 
# 34 
# 51

使用列表推导式和format函数(虽然在这种情况下可能不是必需的,但为了一致性):

python 复制代码
app_buf = bytearray([0x11, 0x22, 0x33]) 
decimal_values = ['{}'.format(byte) for byte in app_buf] 
print(' '.join(decimal_values)) # 使用' '连接成字符串 
# 输出: 17 34 51

使用列表推导式和f-string

python 复制代码
app_buf = bytearray([0x11, 0x22, 0x33])

decimal_values = [f'{byte}' for byte in app_buf]

print(' '.join(decimal_values)) # 使用' '连接成字符串

# 输出: 17 34 51

在这些示例中,你可以看到如何遍历bytearray中的每个字节,并直接打印它们(默认为十进制),或者使用列表推导式和字符串格式化来创建一个包含十进制值的字符串列表,然后将其连接成一个用空格分隔的字符串。

相关推荐
cui_ruicheng15 分钟前
LangChain 应用开发(十二):Agent 中间件与内置中间件
人工智能·python·中间件·langchain
丰锋ff16 分钟前
基于 Qt 的智能门禁系统(三)
开发语言·qt
zx_7414848120 分钟前
【Python 入门】Python 正则表达式零基础讲解:基础语法 + 元字符 + 常用案例
python·正则表达式
weixin1997010801626 分钟前
《大促护航:电商API限流与降级,双11峰值500万调用的架构复盘》(附Python源码)
python·架构·wpf
2601_9578838427 分钟前
2026年8月:华硕笔记本维修相关信息
python·电脑
lzqrzpt33 分钟前
临沂LED驱动电源工程选型与直销工厂评估标准解析
python·单片机·嵌入式硬件
消费知多少33 分钟前
解析勤策签约大西洋焊接费用核销实践案例
开发语言·c#
老郑聊AI业财智造1 小时前
给大模型装上“金融之眼”:Kronos-Report的量化预测架构与技术全景剖析
人工智能·python·深度学习·语言模型·金融·架构·软件工程
问天_观心1 小时前
深入学习Transformer(一)
人工智能·python·深度学习·神经网络·学习·transformer
LabVIEW开发1 小时前
LabVIEW按段拆分TDMS文件的格式边界与重构
开发语言·数据库·重构·labview·labview知识·labview功能·labview程序