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

【python学习】bytearray 数组

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

使用 bytearray 的一些示例:

# 创建一个空的 bytearrayba = bytearray()print(ba) # 输出: bytearray(b'')# 创建一个包含初始值的 bytearrayba = bytearray([0x11, 0x22, 0x33])print(ba) # 输出: bytearray(b'\x11\x22\x33')# 访问 bytearray 中的元素print(ba[0]) # 输出: 17(0x11 的十进制表示)# 修改 bytearray 中的元素ba[1] = 0x44print(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 转换为 bytearrayb = b'\x01\x02\x03'ba = bytearray(b)print(ba) # 输出: bytearray(b'\x01\x02\x03')# 将 bytearray 转换为 bytesb = bytes(ba)print(b) # 输出: b'\x01\x02\x03'

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

数组的长度:

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

数组打印

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

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

十六进制方式打印数组

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

使用循环和直接打印


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

使用列表推导式和format函数

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+)

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来指定格式。

以下是一些示例:

使用循环和直接打印

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

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

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

使用列表推导式和f-string

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

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

http://www.lryc.cn/news/387306.html

相关文章:

  • Labview_Occurrencel(事件发生)
  • 天气网站爬虫及可视化
  • 【python - 数据】
  • 几种热管的构造
  • 【GitOps】使用Google工具JIB实现本地无需安装容器推送镜像,加速SpringCloud项目开发
  • 【proteus经典实战】16X192点阵程序
  • 小白上手AIGC-基于FC部署stable-diffusion
  • 一些指标的学习
  • dledger原理源码分析系列(三)-选主
  • 如何修改PDF文档的作者名称?
  • 从笔灵到AI去痕:全方位提升内容创作与学术诚信
  • 考试如果出现汉诺塔问题怎么办?
  • 导出word模板开发记录
  • PHP爬虫类的并发与多线程处理技巧
  • 用Python将PowerPoint演示文稿转换到图片和SVG
  • 机电公司管理小程序的设计
  • SQL中的子查询和CTE(with ....as..)
  • Cesium 基本概念:创建实体和相机控制
  • vue使用scrollreveal和animejs实现页面滑动到指定位置后再开始执行动画效果
  • 在Ubuntu 16.04上安装和配置GitLab的方法
  • STM32的SPI通信
  • 机器学习引领教育革命:智能教育的新时代
  • 6月29日,每日信息差
  • SpringCloud中复制模块然后粘贴,文件图标缺少蓝色方块
  • JS乌龟吃鸡游戏
  • 第十节:学习ConfigurationProperties类来配置pojo实体类参数(自学Spring boot 3.x的第二天)
  • 如何学习Node.js
  • 云计算基础知识
  • 基于单片机光纤测距系统的设计与实现
  • python项目实战——人生重开模拟器