Python bytes类型详解:定义、与字符串区别及转换方法
本文详细介绍Python 3中的bytes类型,阐述其与str字符串在操作单元上的核心区别。通过示例演示了bytes对象的三种创建方式,包括b前缀、bytes()构造函数及encode()方法,并讲解了利用decode()将字节串还原为字符串的标准流程,适用于网络传输及二进制文件处理场景。
一、bytes 字节串类型概述
Python 3 引入了 bytes 类型,专门用于表示字节序列。它是一个独立的数据类型,不同于 C# 中的列表概念,而是直接对应底层二进制数据。
由于 bytes 对象直接存储原始的二进制字节数据,它非常适合用于网络通信中的数据传输,以及存储各类二进制格式的文件,例如图片、音频和视频等多媒体资源。
1、字节串与字符串之间的区别
bytes 和 str 类型虽然支持大部分相同的方法,但两者的核心区别在于操作的数据单元不同。此外,bytes 类型同样是不可变序列,一旦创建便无法修改。
- 字符串(str)由多个字符组成,其基本操作单元是字符(Character)。
- 字节串(bytes)由多个字节组成,其基本操作单元是字节(Byte)。
2、字节概述
计算机底层数据处理基于两个基本概念:位(bit)和字节(Byte)。
- bit 代表 1 位二进制数,其值非 0 即 1。
- Byte 代表 1 字节,1 个 Byte 包含 8 个 bit。
在字节串中,每个数据单元均为 1 字节(8 位)。由于每 4 位二进制数(取值范围 0 到 15)可以对应一个十六进制数字,因此每个字节需要用两个十六进制数来表示。
b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b',
# 比如 :\xe6 就表示 1 字节,其中 \x 表示十六进制,e6 就是两位的十六进制数。Unicode 字符集涵盖了包括汉字在内的广泛字符,通常占用两个字节(16 位,支持 65536 个字符编号)。实际应用中常见的 UTF-8、UTF-16 等编码方式均属于 Unicode 字符集的范畴。
二、字节串与字符串之间的转换
bytes 对象仅负责以字节(二进制格式)序列的形式记录数据,具体数据的含义由程序逻辑决定。在指定正确的字符集前提下,字符串可以转换为字节串;反之,字节串也可以解码还原为对应的字符串。
1、将一个字符串转换成 bytes 对象
若需将字符串转换为 bytes 对象,主要有以下三种实现方式:
上述代码中 b1 至 b5 均为字节串对象,演示了构建字节串的多种途径。其中 b2 和 b3 通过在 ASCII 字符串前添加 b 前缀直接生成;b4 通过调用 bytes() 函数构建;而 b5 则利用字符串的 encode 方法生成。
- 若字符串内容仅包含 ASCII 字符,可直接在字符串前添加 b 前缀来构建字节串值。
# 创建一个空的bytes
b1 = bytes()
# 创建一个空的bytes值
b2 = b''
# 1、通过b前缀指定hello是bytes类型的值
b3 = b'hello'
print(b3)
print(b3[0])
print(b3[2:4])
#b'hello'
#104
#b'll'- 调用 bytes() 函数(即 bytes 类的构造方法),可将字符串按指定字符集转换为字节串。若不指定字符集参数,默认采用 UTF-8 编码。
# 调用bytes方法将字符串转成bytes对象
b4 = bytes('我爱Python编程',encoding='utf-8')
print(b4)
#b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b'- 调用字符串内置的 encode() 方法,可将字符串按指定字符集转换为字节串(此为常用方式)。若不指定字符集,默认使用 UTF-8 编码。
# 利用字符串的encode()方法编码成bytes,默认使用utf-8字符集
b5 = "学习Python很有趣".encode('utf-8')
print(b5)
#b'\xe5\xad\xa6\xe4\xb9\xa0Python\xe5\xbe\x88\xe6\x9c\x89\xe8\xb6\xa3'从输出结果可见,字节串与字符串在表现形式上相似,区别在于字节串中的每个数据单元固定为 1 字节。
2、decode():将一个bytes 对象转换成字符串
若程序获取了 bytes 对象,可调用其 decode() 方法将其解码还原为字符串。
#将bytes 对象解码成字符串,默认使用UTF-8进行解码
st = b5.decode('utf-8')
print(st)#学习Python很有趣本文介绍了 Python 字节串类型 bytes 的定义、与字符串的区别及转换方法,希望对读者有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









