您的位置:

Python编程——从16进制入门

一、什么是16进制?

在计算机中,16进制是一种常用的数字表示方式。它是以16为基数,使用0至9和A至F共计16个符号来表示数码。其中,A~F表示10~15,这样做可以有效压缩数字的长度,节约存储空间。在16进制中,每个数字的位权分别为16的0次方、16的1次方、16的2次方……以此类推。

在Python中,我们可以使用多种方法将16进制数转换为十进制数。比如,使用int()函数将16进制字符串转换成整数,同时指定字符串是16进制:

hex_str = '4D5'
dec_num = int(hex_str, 16)
print(dec_num)

输出结果为:

1237

二、Python中16进制的应用

1. 运算符

在Python中,我们可以使用16进制进行位运算。如下表所示,共有6个位运算符。

运算符 描述 示例
& 按位与 0xC3 & 0x3F=0x03
| 按位或 0x60 | 0x1F=0x7F
^ 按位异或 0x5E ^ 0x3F=0x61
~ 按位取反 ~0x5E=0xA1
<< 左移 0x0E << 2=0x38
>> 右移 0xE0 >> 2=0x38

2. 字符串操作

在Python中,字符串可以通过hex()函数转换为16进制格式。例如,将字符串"Hello World"转换为16进制格式的字符串:

string = "Hello World"
output = ''.join(format(ord(x), '02x') for x in string)
print(output)

输出结果为:

48656c6c6f20576f726c64

同时,我们也可以将16进制格式的字符串转换为字符串。例如,将16进制格式的字符串"48656c6c6f20576f726c64"转换为原始字符串:

hex_string = "48656c6c6f20576f726c64"
output = bytes.fromhex(hex_string).decode('utf-8')
print(output)

输出结果为:

Hello World

3. 数据存储

在Python中,我们可以使用struct库对二进制数据进行封装和解封装操作。其中,pack()函数可以将数据按照指定的格式打包成字节序列,而unpack()函数可以将字节序列解封装成原始数据。在使用pack()函数时,可以使用两个字符的格式代码来指定数据类型,如下表所示。

格式代码 数据类型
x 空字节
b/B 有符号/无符号字节型整数
h/H 有符号/无符号短整型
i/I 有符号/无符号整型
q/Q 有符号/无符号长整型
f 单精度浮点数
d 双精度浮点数
s 字符串

例如,使用pack()函数将数字1、2和3以16进制格式打包成一个字节序列:

import struct

packed_data = struct.pack('BBB', 1, 2, 3)
print(packed_data.hex())

输出结果为:

010203

同时,我们也可以使用unpack()函数将字节序列解封装成原始数据。例如,解封装刚才打包的字节序列:

unpacked_data = struct.unpack('BBB', packed_data)
print(unpacked_data)

输出结果为:

(1, 2, 3)

三、总结

在Python编程中,16进制是一种常用的数字表示方式,可以在位运算、字符串操作和数据存储中发挥重要作用。在实际应用中,我们常需要将十进制数转换成16进制数或者将16进制数转换成十进制数,使用Python的内置函数可以轻松实现这一功能。同时,我们通过代码示例介绍了Python中使用16进制进行位运算、字符串操作和数据存储的方法。