文章目录
- 1.字节
- 2.不同的进制之间转换数值
- 3.bytes()用法
- 4.struct.unpack()用法
- 5.字符串格式化{:03.2f}
1.字节
字节(Byte)是计算机存储和处理数据的基本单位之一。一个字节可以存储8个二进制位(bit),每个二进制位可以表示0或1。
在计算机中,字节通常是以二进制形式存储和传输的。例如,一个8位的二进制数00110110就是一个字节。字节的二进制表示范围是从00000000到11111111,对应着十进制的0到255。
字节也可以表示为十六进制形式,每个字节可以用两个十六进制数字表示。例如,字节00110110用十六进制表示为0x36。
二进制(Binary):
二进制是一种基于2的数字系统,只使用0和1来表示数值。
八进制(Octal):
八进制是一种基于8的数字系统,使用0到7共八个数字来表示数值。
十进制(Decimal):
十进制是我们通常使用的数字系统,使用0到9共十个数字来表示数值。
十六进制(Hexadecimal):
十六进制是一种基于16的数字系统,使用0到9的十个数字和A-F(或a-f)共16个字符来表示数值。
2.不同的进制之间转换数值
**int(i, 16)**是一个将十六进制数表示转换为整数的方法。具体来说,它将一个十六进制表示的字符串i转换为相应的整数。
1).处理二进制数据:
假设你有一个十六进制的二进制编码字符串,比如0b1101,你想将它转换为整数。
binary_string = "0b1101"
decimal_number = int(binary_string, 2) # 2表示二进制
print(decimal_number) # 输出: 13
在这个例子中,int(binary_string, 2)将binary_string转换为整数13,因为0b1101在二进制中表示的数值是13。
2).编码处理:
在编码过程中,你可能会遇到需要将十六进制表示的字符转换为它们对应的ASCII字符。
hex_string = "41"
decimal_number = int(hex_string, 16)
print(chr(decimal_number)) # 输出: A
在这个例子中,int(hex_string, 16)将hex_string转换为整数65,因为41在十六进制中表示的数值是65,而65是ASCII码表中的字符’A’。
3).进制转换计算:
在进行各种计算时,你可能需要将数值从一种进制转换为另一种进制。例如,将十六进制数转换为十进制数。
hex_number = "1A"
decimal_number = int(hex_number, 16)
print(decimal_number) # 输出: 26
在这个例子中,int(hex_number, 16)将hex_number转换为整数26,因为1A在十六进制中表示的数值是26。
3.bytes()用法
bytes()函数用于创建一个字节对象(bytes object)。字节对象是一种不可变的序列类型,包含一系列字节。每个字节是一个表示8位二进制数的整数,范围从0到255。
1).通过字节序列创建字节对象:
bytes(iterable):从可迭代对象iterable创建字节对象,例如列表或元组。
bytes(string, encoding):从字符串string和指定的编码encoding创建字节对象。
以下是使用bytes()函数的一些示例:
byte_string = bytes([10, 20, 30])
print(byte_string) # 输出: b'\n\x14\x1e'
2).通过字符串和编码创建字节对象:
byte_string = bytes("Hello, World!", "utf-8")
print(byte_string) # 输出: b'Hello, World!'
3). 从文件读取字节数据并创建字节对象:
with open("example.txt", "rb") as file:byte_string = bytes(file.read())
print(byte_string) # 输出文件内容的字节表示
需要注意的是,字节对象是不可变的。如果需要对字节数据进行修改,可以创建一个新的字节对象进行操作。字节对象在处理二进制数据和与底层系统进行交互时非常有用,例如网络通信、图像处理等场景。
4.struct.unpack()用法
struct.unpack 是 Python 标准库中的一个函数,用于将二进制数据解析成 Python 中的数据类型。它通常与 struct.pack 一起使用,struct.pack 用于将 Python 数据类型打包成二进制数据。
import struct# 定义一个二进制数据
binary_data = b'\x01\x02\x03\x04'# 使用 struct.unpack 解析二进制数据
unpacked_data = struct.unpack('BBBB', binary_data)print(unpacked_data) # 输出: (1, 2, 3, 4)
在上面的例子中,‘BBBB’ 是格式字符串,它指定了如何解析二进制数据。每个字符代表一个数据类型,如下:
‘B’ 代表无符号字符 (unsigned char),范围是 0 到 255。
‘h’ 代表有符号短整数 (short),范围是 -32768 到 32767。
‘i’ 代表有符号整数 (int),范围是 -2147483648 到 2147483647。
等等。具体的格式字符可以根据你的需要选择,详情可以查阅 Python 官方文档。
5.字符串格式化{:03.2f}
{:03.2f} 是 Python 字符串格式化中的一种格式,用于格式化浮点数。
{}: 这是一个占位符,用于将后面的变量插入到字符串中。
:: 冒号后面用于指定格式化的方式。
03.2f: 这部分包含了格式化说明符,具体含义如下:
0: 表示在结果中填充前导零(如果需要的话)。
3: 表示最小字段宽度为 3,即最少占用 3 个字符的位置,如果当前数字不足 3 位,则在前面填充零。
.2: 表示保留小数点后 2 位。
f: 表示浮点数类型。
因此,{:03.2f} 表示将一个浮点数格式化为字符串,至少占用 3 个字符的位置,保留小数点后 2 位,并在前面填充零(如果需要的话)。
例如,如果浮点数是 12.3456,那么格式化后的结果将是 012.35,其中小数点后两位四舍五入,且使用前导零填充。