Python bytes 类型的可变版本——bytearray类型

bytearray 是 Python 中的一个内置类型,用于表示可变长度的字节序列。它是 bytes 类型的可变版本,即 bytearray 实例的内容可以修改,而 bytes 实例是不可变的。

创建 bytearray 的方式:

  1. 通过构造函数创建:可以通过传递一个整数(表示字节数组的长度)来创建一个新的空字节数组,或者传递一个字节字符串或字节数组来创建一个新的字节数组。

    ba1 = bytearray(10)       # 创建一个长度为10的空字节数组  
    ba2 = bytearray(b'hello')  # 创建一个包含'hello'的字节数组

  2. 通过字节串转换:可以使用 bytes 类型的 tobytes 方法将 bytearray 转换为字节串,或者使用 bytearray 构造函数将字节串转换为 bytearray

    ba = bytearray(b'hello')  
    bs = ba.tobytes()  # bs 是一个 bytes 实例

  3. 通过列表转换:还可以使用整数列表来创建 bytearray,列表中的每个元素都必须在 0 到 255 之间。

    ba = bytearray([72, 101, 108, 108, 111])  # 创建一个包含'hello'的字节数组(ASCII 码)

bytearray 的主要优点是可变性,可以使用索引、切片或 appendextendinsertremovepop 等方法来修改它。这在处理二进制数据时非常有用,特别是需要修改或构建二进制数据时。

此外,bytearray 还支持一些其他方法,如 fromhex(从十六进制字符串创建字节数组)和 tohex(将字节数组转换为十六进制字符串)。

# 创建一个bytearray对象  
ba = bytearray(b'Hello, World!')  # 打印原始bytearray  
print('Original bytearray:', ba)  # 输出:bytearray(b'Hello,World!')# 修改bytearray中的某个字节  
# 将 'H' (ASCII 72) 修改为 'h' (ASCII 104)  
ba[0] = 104    
print('Modified bytearray:', ba)  # 输出:bytearray(b'hello,World!')# 也可以在bytearray末尾添加新的字节  
ba.extend(b' again!')  
print('Extended bytearray:', ba)  # 输出:bytearray(b'hello,World! again!')# 使用append方法添加一个字节  
ba.append(ord('!'))  
print('Appended bytearray:', ba)  # bytearray(b'hello,World! again!!')# 删除bytearray中的倒数2个字节  
del ba[-2:]   
print('Truncated bytearray:', ba)  # bytearray(b'hello, World! again')# 使用insert方法插入一个字节  
ba.insert(0, ord('M'))  
print('Inserted bytearray:', ba)  # bytearray(b'Mhello, World! again')# 使用remove方法删除一个字节(注意:只会删除第一个匹配的字节)  
ba.remove(ord('l'))   
print('Removed bytearray:', ba)  # bytearray(b'Mhelo, World! again')# 使用pop方法弹出并返回指定索引处的字节  
popped = ba.pop(5)  
print('Popped byte:', popped)  #  44
print('After pop bytearray:', ba)  # bytearray(b'Mhelo World! again') 【删除chr(44):','# 反转bytearray  
ba.reverse()  # 打印反转后的bytearray  
print('Reversed bytearray:', ba) # bytearray(b'niaga !dlroW olehM')

ps:

*将bytearray转换为字符串,可以使用decode()方法

*当只涉及英文字符时,ASCII编码和UTF-8编码相同,因为UTF-8编码对ASCII字符集是兼容的。对于ASCII字符集中的字符,它们在UTF-8编码中仍然使用一个字节表示,且字节的二进制表示与ASCII编码相同。因此,当只处理英文字符时,使用ASCII编码或使用UTF-8编码没有区别。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/683089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幻兽帕鲁云服务器机型推荐配置,支持6个人以内/10个人/20个人以内的配置怎么选择?

如果是6个人以下,比较建议4核16G的这个服务器配置。如果人数更多,就选8核32G这个配置,或者更高,如果是20个人以上,那么就得16核64G35M这样或者更高的配置了。 参考: 4~8人:推荐4核16G&#xf…

debug - 打补丁 - 浮点数加法

文章目录 debug - 打补丁 - 浮点数加法概述笔记demo用CE查看汇编(x64debug)main()update_info()快捷键 - CE中查看代码时的导航打补丁的时机 - 浮点数加法补丁代码补丁效果浮点数寄存器组的保存END debug - 打补丁 - 浮点数加法 概述 在cm中, UI上显示的数值仅仅用来显示, 改…

力扣---通配符匹配

题目描述: 给你一个输入字符串 (s) 和一个字符模式 (p) ,请你实现一个支持 ? 和 * 匹配规则的通配符匹配: ? 可以匹配任何单个字符。 * 可以匹配任意字符序列(包括空字符序列)。 判定匹配成功的充要条件是&#xff…

华为23年9月笔试原题,巨详细题解,附有LeetCode测试链接

文章目录 前言思路主要思路关于f函数的剖析Code就到这,铁子们下期见!!!! 前言 铁子们好啊!今天阿辉又给大家来更新新一道好题,下面链接是23年9月27的华为笔试原题,LeetCode上面的ha…

《软件质量保证与测试》单元测试:使用单元测试工具 JUnit 测试自定义的类

文章目录 前言一、实验目的二、实验内容三、实验步骤和结果3.1、建立需要进行 JUnit 测试的类 StringUtil3.2、建立对应的 JUnit Test 类 StringUtilTest3.3、添加 JUnit 测试信息3.4、生成测试代码3.5、assertEquals 方法介绍3.6、使用 assertEquals 方法进行单元测试3.7、执行…

开源≠不赚钱,开源软件盈利的7大模式。

开源不是目的,目的是圈用户,留住用户,盈利自然不成问题。 开源系统可以通过多种方式赚钱,以下是其中几种常见的方式: 提供付费支持: 开源系统可以提供付费的技术支持服务,包括安装、配置、维…

mysql5.6安装---windows版本

安装包下载 链接:https://pan.baidu.com/s/1L4ONMw-40HhAeWrE6kluXQ 提取码:977q 安装视频 1.解压完成之后将其放到你喜欢的地址当中去,这里我默认放在了D盘,这是我的根目录 2.配置环境变量 我的电脑->属性->高级->环境…

阿里云增加数据库访问白名单

阿里云增加数据库访问白名单 概况 我们希望在外网访问数据库时,可能会遇到无法连接的问题,这有可能是被拦截了。这时就需要去查看自己的ip有没有在白名单里面,没有的话就把ip加入到白名单。 路径 阿里云控制台-搜索RDS-进入RDS管理控制台…

宋小黑的生财知识资料库第1011期

大家好,我是小黑,在当前经济和职场环境中,拥有一份副业已经成为很多人增加财务安全感和提升个人能力的重要手段。通过投身于副业,你不仅可以为自己创造一个额外的收入来源,减少对主职工作的经济依赖,还可以…

【C++】类和对象(四)

前言:在类和对象中,我们走过了十分漫长的道路,今天我们将进一步学习类和对象,类和对象这块荆棘地很长,各位一起加油呀。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:高质量&a…

【Spring】定义过滤器Filter和拦截器Interceptor

# 定义过滤器 package com.holen.filter;import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import java.io.IOException;pub…

【Web】NSSCTF Round#18 Basic个人wp(部分)

目录 ①门酱想玩什么呢? ②Becomeroot ①门酱想玩什么呢? 先试一下随便给个链接 不能访问远程链接,结合评论区功能,不难联想到xss,只要给个评论区链接让门酱访问就可 我们研究下评论区 从评论区知道,要…

jmeter-问题三:如何在给接口命名,使得察看结果树更清晰

问题三:如何在给接口命名,使得察看结果树更清晰 jmeter中声明的变量在任意地方都可以引用,我们可以利用这一点来实现 解决方法: 场景:测试登录接口(包含登录成功,密码错误,用户名…

Android---Jetpack Compose学习004

CompositionLocal 通常情况下,在 Compose 中,数据以参数形式向下流经整个界面树传递给每个可组合函数。但是,对于广泛使用的常用数据(如颜色或类型样式),这可能会很麻烦。 为了支持无需将颜色作为显式参数…

- 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》

本文属于专栏《构建工业级QPS百万级服务》​​​​​ 1、前置知识 c的内存管理,主要说的是堆内存管理。现代计算机系统中,用户进程的堆内存,由内核映射。 堆内存的来源 主要是通过mmap()函数,在进程的虚拟地址空…

VueCLI核心知识综合案例TodoList

目录 1 拿到一个功能模块首先需要拆分组件: 2 使用组件实现静态页面的效果 3 分析数据保存在哪个组件 4 实现添加数据 5 实现复选框勾选 6 实现数据的删除 7 实现底部组件中数据的统计 8 实现勾选全部的小复选框来实现大复选框的勾选 9 实现勾选大复选框来…

OpenCV Mat 实例详解 二

构造函数 OpenCV Mat实例详解一中已介绍了部分OpenCV Mat构造函数&#xff0c;下面继续介绍剩余部分构造函数。 Mat (const std::vector< _Tp > &vec, bool copyDatafalse)&#xff1b; vec 包含数据的vec对象 copyData 是否拷贝数据&#xff0c;true— 拷贝数据&…

数据分析案例-基于亚马逊智能产品评论的探索性数据分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

C语言练习-----求和Sn=a+aa+aaa+aaaa+aaaaa.............

int main() {int m 0;int n 0;scanf("%d %d", &m, &n);int sum 0;int i 0;int k 0;for (i 0; i < n; i){k k * 10 m;sum sum k;}printf("%d", sum);return 0; } 我们这里不考虑过大的数字&#xff0c;否则会越界&#xff1b; m代表…

亿级推送,得物是怎么架构的?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近&#xff0c;尼恩指导一个小伙伴简历&#xff0c;需要织入亮点项目、黄金项目。 前段时间&#xff0c;指导小伙写了一个《高…