Python学习笔记 - 探索Bytes和Bytearray

大家好,我是Mr数据杨,今天我们将一起探索Python中的Bytes和Bytearray。你们是否熟悉《三国演义》这部古代战争巨作?如果不熟悉,没关系,我来帮你们做个有趣的类比。

首先,让我们把"定义Bytes"和"使用bytes()函数创建对象"想象成诸葛亮的孔明灯。每一只灯都有自己特定的光亮和颜色,就像Bytes中的每个字节都有自己的值。我们用bytes()函数创建的对象就像制造孔明灯一样,每个字节都是单独的,不可变的。

接下来,"操作bytes对象"可以比喻成诸葛亮指挥孔明灯飞行。虽然每个灯本身无法改变,但是我们可以选择不同的灯,拼凑成不同的景象。

然后,我们说说"使用bytes.fromhex()和b.hex()处理十六进制",这个过程像是诸葛亮给每一只灯添加了秘密的信号,这些信号只有知道解密方法的人才能理解。

最后,让我们看看"使用bytearray处理可变的二进制数据"。这就像是诸葛亮发挥他的巧思,他不仅可以制造孔明灯,还可以根据实际情况调整灯的光亮和颜色。

在我们学习Python的过程中,你就是这个故事中的诸葛亮,你将学会如何操控这些"孔明灯",用你的智慧创造出自己的编程世界。好了,让我们开始吧!

定义Bytes

在Python中,我们可以通过在字符串前面添加'b'前缀来定义bytes对象。

b = b'Dynasty Warriors'
print(b)         # 输出:b'Dynasty Warriors'
print(type(b))   # 输出:<class 'bytes'>

我们可以使用任何的单引号、双引号或三引号来定义bytes对象。

print(b'Dynasty Warriors')
print(b"Dynasty Warriors")
print(b'''Dynasty Warriors''')

如果我们希望在bytes中包含反斜杠等转义字符,我们可以使用'r'前缀来避免转义。

b = rb'Dynasty\Warriors'
print(b)         # 输出:b'Dynasty\\Warriors'
print(b[9])      # 输出:97
print(chr(97))   # 输出:'a'

使用bytes()函数创建对象

我们还可以使用内置的bytes()函数来创建bytes对象。bytes()函数可以接受几种不同类型的参数。

  • 使用字符串和指定的编码:
b = bytes('Dynasty Warriors', 'utf8')
print(b)         # 输出:b'Dynasty Warriors'
print(type(b))   # 输出:<class 'bytes'>
  • 使用指定大小创建一个全零的bytes对象:
b = bytes(8)
print(b)         # 输出:b'\x00\x00\x00\x00\x00\x00\x00\x00'
print(type(b))   # 输出:<class 'bytes'>
  • 从可迭代对象创建bytes对象:
b = bytes([100, 101, 102, 103, 104])
print(b)         # 输出:b'defgh'
print(type(b))   # 输出:<class 'bytes'>

操作bytes对象

bytes对象支持许多字符串操作,如使用in和not in运算符检查子序列是否存在,使用+和*运算符进行连接和复制,以及使用索引和切片进行访问。

b = b'abcde'
print('cd' in b)   # 输出:True
print('o' not in b) # 输出:True
print(b + b'fghi')  # 输出:b'abcdefghi'
print(b * 3)        # 输出:b'abcdeabcdeabcde'
print(b[2])         # 输出:99
print(b[1:3])       # 输出:b'bc'

我们也可以使用len、min和max函数检查bytes对象的长度、最小值和最大值。

b = b'Dynasty\nWarriors'
print(len(b))      # 输出:16
print(min(b))      # 输出:10
print(max(b))      # 输出:121

使用bytes.fromhex()和b.hex()处理十六进制

bytes.fromhex()函数可以将十六进制字符串转换为bytes对象,而`

b.hex()`方法可以将bytes对象转换为十六进制字符串。

b = bytes.fromhex(' aa 68 4682cc ')
print(b)           # 输出:b'\xaahF\x82\xcc'
print(list(b))     # 输出:[170, 104, 70, 130, 204]

print(b.hex())     # 输出:'aa684682cc'
print(type(b.hex())) # 输出:<class 'str'>

使用bytearray处理可变的二进制数据

bytearray是一个类似于bytes但是可变的二进制序列类型,我们可以使用bytearray()函数创建。

ba = bytearray('真.三國.無双', 'UTF-8')
print(ba)          # 输出:bytearray(b'\xe7\x9c\x9f.\xe4\xb8\x89\xe5\x9c\x8b.\xe7\x84\xa1\xe5\x8f\x8c')

ba[5] = 0xee
print(ba)          # 输出:bytearray(b'\xe7\x9c\x9f.\xe4\xee\x89\xe5\x9c\x8b.\xe7\x84\xa1\xe5\x8f\x8c')

ba[8:11] = b'hello'
print(ba)          # 输出:bytearray(b'\xe7\x9c\x9f.\xe4\xee\x89\xe5hello\xe7\x84\xa1\xe5\x8f\x8c')

总的来说,Python的bytes和bytearray类型为处理二进制数据提供了强大的工具,理解它们的工作方式对于进行二进制数据操作和进行低级系统编程是非常重要的。

猜你喜欢

转载自blog.csdn.net/qq_20288327/article/details/130982351
今日推荐