【python学习】bytearray 数组

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

使用 bytearray 的一些示例:

# 创建一个空的 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 允许你原地修改数据,从而提高性能。

数组的长度:

# 创建一个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.mfbz.cn/a/759254.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARCGIS添加在线地图

地图服务地址:http://map.geoq.cn/ArcGIS/rest/services 具体方法: 结果展示:

Spring底层原理之bean的加载方式八 BeanDefinitionRegistryPostProcessor注解

BeanDefinitionRegistryPostProcessor注解 这种方式和第七种比较像 要实现两个方法 第一个方法是实现工厂 第二个方法叫后处理bean注册 package com.bigdata1421.bean;import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.…

轻量级仿 SpringBoot 程序

但凡 Java 程序,想必就是 Spring 程序;但凡 Spring 程序,想必就是 SpringBoot 程序——且慢,当今尚有不是 SpringBoot 即 SpringMVC 的程序不?有——老旧的遗留系统不就是嘛~——不,其实只要稍加“调教”&a…

基于SpringBoot漫画网站系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

目前常见的几款企业级im即时通讯软件有哪些?

在目前的市场上,有几款常见的企业级即时通讯软件广受企业青睐。以下是其中几款主流企业级即时通讯软件的介绍和特点。 1. 微软Teams 微软Teams是一款集即时通讯、协作和视频会议功能于一体的企业级通讯软件。它提供了实时聊天、语音通话、视频会议、文件共享和团队…

零刻SER8 8845HS设置RAID磁盘阵列教程

SER8内置两个NVme硬盘位,支持硬盘RAID功能,目前支持以下几种RAID模式。 Volume(卷):将多块硬盘拼接成一个大硬盘,也称为JBOD(Just a Bunch Of Disks)。它不要求硬盘容量相同&#xf…

软件构造 | 期末查缺补漏

软件构造 | 期末查缺补漏 总体观 软件构造的三维度八度图是由软件工程师Steve McConnell提出的概念,用于描述软件构建过程中的三个关键维度和八个要素。这些维度和要素可以帮助软件开发团队全面考虑软件构建的方方面面,从而提高软件质量和开发效率。 下…

What does the error ‘module ‘langchain‘ has no attribute ‘verbose‘ refer to?

题意:错误 module langchain has no attribute verbose 指的是什么意思? 问题背景: Kind of new to Langchain/Qdrant but Im building a recommendation engine to recommend users based on the contents of their associated PDF files, …

学习阳明心学,需要下真功夫,持续用功

阳明心学是功夫之学,看到善的就发扬光大,看到恶的就立即改正,这才是真功夫

LeetCode 算法:二叉搜索树中第K小的元素 c++

原题链接🔗:二叉搜索树中第K小的元素 难度:中等⭐️⭐️ 题目 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从1开始计数)。 示例 1:…

【web】2、集成插件

1、element-plus 官网地址:设计 | Element Plus 安装 plus 及 icon 图标库 1.1 官网提供plus安装方法: 1.2 官网提供 icon 安装方法 1.3 安装 pnpm install element-plus element-plus/icons-vue main.ts全局安装element-plus,element-plus默认支持语言英语设…

Navicat 外网连接 mysql (1、通过SSH方式内网访问 2、对外开放3306端口)

1、通过SSH方式内网访问 直接常规方式使用IP、账号密码连接,失败 SSH方式: 常规 选项卡中:localhost录入数据库账号密码 SSH 选项卡中:勾选使用SSH,输入服务器IP、账号、密码 如果出现该错误,可能是服务器…

51个图表,完美展示数据分布关系!

本节介绍seaborn展示数据分布关系的图表(Distribution plots)的实现,该类图表用于展示数据集的分布规律,帮助快速获取数据多方面信息,例如,观测值的范围、中心趋势、是否存在某个方向上严重偏斜、是否存在双…

10大内网安全管理系统!企业内网安全必备系统

内网安全管理系统对于维护企业网络安全至关重要,它们帮助监控、管理内部网络资源,防止数据泄露和安全威胁。以下是十款知名的内网安全管理系统。 1. 安企神终端安全管理系统 详细介绍: 安企神是针对企业内网安全需求设计的一款综合管理系统&…

在大数据盛行的今天,为什么需要使用图数据库?

分类 性能 可扩展性 灵活性 复杂性 键值存储数据库 高 高 高 无 文档数据库 高 可变 高 低 列存储数据库 高 可变 一般 低 图数据库 可变 高 高 高 关系型数据库 可变 可变 低 一般 表1:5类主流数据库产品分析 对于深度数据的分析和…

数值分析笔记(四)数值微积分

牛顿-科茨公式 ∫ a b f ( x ) d x ≈ ( b − a ) ∑ k 0 n C k ( n ) f ( a k h ) \int_a^bf(x) \mathrm{d}x\approx(b-a)\sum_{k0}^nC_k^{(n)}f(akh) ∫ab​f(x)dx≈(b−a)k0∑n​Ck(n)​f(akh) 其中, C k ( n ) C_k^{(n)} Ck(n)​为科茨系数。 n1时&#xff…

Drag Select Compose:实现多平台图片多选功能的利器

Drag Select Compose:实现多平台图片多选功能的利器 在现代移动应用开发中,图片多选功能是一个常见且实用的需求。而实现这种功能可能涉及到复杂的手势处理和状态管理。今天,我将介绍一款强大的Compose多平台库——Drag Select Compose,它能够轻松实现类似于Google Photos…

Qt开发 | 无边框窗口 | 自定义标题栏 | 拖拽拉伸 | 窗口阴影 | 圆角窗口

文章目录 一、QWidget类介绍二、无边框窗口的基本实现三、自定义标题栏并实现拖拽拉伸四、设计一个无边框窗口公共类五、标题栏qss美化、关闭、最小化、最大化六、实现窗口阴影七、圆角窗口八、一个自定义标题栏带圆角阴影的窗口 一、QWidget类介绍 QWidget 是 Qt 框架中的一个…

SpringBoot整合MongoDB JPA使用

一、整合MongoDB SpringDataMongoDB是 SpringData家族成员之一,MongoDB的持久层框架,底层封装了 mongodb-driver。mongodb-driver 是 MongoDB官方推出的 Java连接 MongoDB的驱动包,相当于JDBC驱动。 SpringBoot整合 MongoDB,引入…

【MySQL】数据库——备份与恢复,日志管理1

一、数据备份的重要性 1.备份的主要目的是灾难恢复 在生产环境中,数据的安全性至关重要 任何数据的丢失都可能产生严重的后果造成数据丢失的原因: 程序错误人为,操作错误运算错误磁盘故障灾难(如火灾、地震)和盗窃 2.数据库备份…