Python3之字节串bytes与字节数组bytearray的使用详解

Python3之字节串bytes与字节数组bytearray的使用详解

在Python3中,字节串(bytes)和字节数组(bytearray)是存储字节序列的两种方式。在本文中,我们将会详细讲解字节串和字节数组的使用,以及它们在Python编程中的用处。

字节串(bytes)

字节串(bytes)是一种用来存储字节序列(byte sequence)的不可变的数据类型。在Python3中,字节串可以通过以下方式创建:

b = b'hello world'

上述代码创建了一个字节串变量b,该变量存储"hello world"字符串的字节序列。请注意,字节串必须使用b前缀来加以区分。

接下来,让我们看看如何访问字节串的单个字节。可以通过类似列表(list)的方式来访问字节串中的元素,如下所示:

print(b[0])   # 104
print(b[1])   # 101
print(b[2])   # 108

上述代码将会依次输出字节串中第一个、第二个、第三个字节的ASCII码值,也就是'h'、'e'、'l'。

在Python3中,字节串也支持切片(slicing)操作。例如,我们可以使用以下代码来获取'h'和'e'所对应的字节:

print(b[:2])   # b'he'

另外,如果我们需要将一个字符串转换为字节串,可以使用以下代码:

s = "hello world"
b = s.encode()

上述代码将会创建一个新的字节串变量b,该变量包含了字符串s的字节表示。默认情况下,Python3使用UTF-8编码来将字符串转换为字节串。

字节数组(bytearray)

字节数组(bytearray)是一种用来存储字节序列的可变的数据类型。它与字节串类似,但是允许我们修改其中的元素。在Python3中,字节数组可以通过以下方式创建:

barr = bytearray(b'hello world')

上述代码创建了一个字节数组变量barr,该变量存储了"hello world"字符串的字节序列。请注意,我们在创建字节数组时需要先将字节串转换为字节数组。

接下来,让我们看看如何修改字节数组中的元素。与列表类似,我们可以使用索引和赋值操作来修改字节数组中的元素。例如,以下代码将会把字节数组中的第一个字节设为'A':

barr[0] = ord('A')

请注意,上述代码中,我们使用了ord函数来获取字母'A'的ASCII码值。

在Python3中,字节数组也支持切片操作。为了演示该操作,我们可以使用以下代码来将字节数组中的前两个字节替换为'b1'和'b2':

barr[:2] = b'b1b2'

示例说明

示例一:计算SHA256哈希值

让我们用一个示例来说明字节串和字节数组的用处。假设我们需要计算一个字符串的SHA256哈希值。我们可以使用Python3内置的hashlib库来完成此任务。然而,该库仅支持字节串作为输入。因此,我们需要将字符串转换为字节串,如下所示:

import hashlib

s = "hello world"
b = s.encode()

m = hashlib.sha256()
m.update(b)
print(m.hexdigest())

上述代码将会输出字符串"hello world"的SHA256哈希值。

示例二:修改JPEG图像的宽度和高度

字节数组也可以用于图像处理。假设我们需要将一张JPEG图像的宽度和高度各缩小一半。我们可以使用Python3内置的Pillow库来读取和修改JPEG图像。以下是修改一张名为"cat.jpg"的JPEG图像的宽度和高度的示例代码:

from PIL import Image

with open('cat.jpg', 'rb') as f:
    barr = bytearray(f.read())

im = Image.open(f)
width, height = im.size

new_width, new_height = width // 2, height // 2

# 修改JPEG文件头
barr[3] = 0xC0  # SOF0的标识符
barr[5:7] = new_height.to_bytes(2, byteorder='big')
barr[7:9] = new_width.to_bytes(2, byteorder='big')

with open('cat_small.jpg', 'wb') as f:
    f.write(barr)

上述代码将会读取名为"cat.jpg"的JPEG图像,并把它的宽度和高度各缩小一半。最后,代码将会把修改后的图像存储为"cat_small.jpg"。

总结

在Python3的编程中,字节串和字节数组的使用是非常普遍的。字节串可以用于数据的编码和解码,而字节数组则可以用于数据的处理和修改。在本文中,我们详细讲解了字节串和字节数组的使用,并且提供了示例代码来帮助读者更好地理解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3之字节串bytes与字节数组bytearray的使用详解 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • 10个必须要掌握的Python内置函数

    下面我将详细讲解一下“10个必须要掌握的Python内置函数”的攻略。 目录 Python内置函数及其作用 10个必须要掌握的Python内置函数 print() len() range() type() str() int() float() list() dict() set() 示例说明 总结 1. Python内置函数及其作用 Python内置函数是…

    python 2023年6月5日
    00
  • python自动脚本的pyautogui入门学习

    Python自动脚本的PyAutoGUI入门学习 介绍 PyAutoGUI是一个Python模块,可以自动完成一些鼠标和键盘操作,甚至可以获取屏幕上的图像内容。它广泛应用于自动化测试、屏幕录制和一些重复性操作等场景。 本文将从安装PyAutoGUI讲起,一步一步介绍其基本使用方法,包括移动鼠标、点击、输入等操作,并给出两个具体的示例说明。 安装 在使用PyA…

    python 2023年5月18日
    00
  • 分享一个常用的Python模拟登陆类

    下面我将会详细讲解如何分享一个常用的Python模拟登陆类,包含以下几个部分。 1. 确定模拟登陆的目标站点 在分享一个常用的Python模拟登陆类之前,我们首先需要明确登陆对象的目标站点。不同的站点,在模拟登陆过程中可能会有不同的实现方式和注意点。 例如,对于一些不需要验证码的网站,登陆过程可能就比较简单,只需要模拟发送一次POST请求,将用户名和密码等信…

    python 2023年6月3日
    00
  • python 解压pkl文件的方法

    下面是“Python解压pkl文件的方法”的完整攻略: 1. 什么是Pickle(pkl)文件? Pickle是一种Python序列化/反序列化(Serialization/Deserialization)模块。它能够将Python数据结构转换为二进制流,进而可以将数据以文件的形式进行保存,方便存取和共享。Pickle的文件格式是以.p文件扩展名的二进制单一…

    python 2023年6月2日
    00
  • Java中 % 与Math.floorMod() 区别详解

    首先来看一下 % 和 Math.floorMod() 的区别。 % 运算符 在Java中,% 运算符用于计算两个数值之间的模运算,即计算除法操作的余数。 举个例子: int a = 7; int b = 3; int result1 = a % b; // result1 = 1 在这个例子中,a % b 计算的结果是 1,代表 a 除以 b 的余数是 1。…

    python 2023年6月3日
    00
  • 详解如何用Python登录豆瓣并爬取影评

    本文将详细讲解如何使用Python登录豆瓣并爬取影评的完整攻略。我们将使用requests库和BeautifulSoup库来实现登录和爬取影评的功能。 登录豆瓣 首先,我们需要登录豆瓣,获取登录后的cookie。以下是一个登录豆瓣的示例: import requests # 登录豆瓣 def login_douban(username, password):…

    python 2023年5月15日
    00
  • 举例详解Python中yield生成器的用法

    下面是针对Python中yield生成器的用法的完整攻略。 什么是yield生成器 在Python中,使用yield可以定义生成器函数(generator function)。 生成器函数每次调用时,返回一个生成器(generator)对象。生成器支持迭代器协议,能够被for-in循环调用,也能用next()函数获取下一个值。生成器每次返回一个值后会“暂停”…

    python 2023年6月3日
    00
  • Python 从相对路径下import的方法

    当我们从一个 Python 脚本文件中使用 import 语句导入模块时,我们需要指定模块路径。通常,我们会使用绝对路径或相对路径来指定需要导入的模块。在本文中,我们将重点讨论如何在 Python 代码中使用相对路径导入模块。 什么是相对路径? 相对路径是指相对于当前脚本文件的路径,可以是相对于当前目录的路径,也可以是相对于父目录的路径。在 Python 中…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部