在 Python 中,将一个表示十六进制数的字符串转换为实际的十六进制数(整数或字节),可以使用以下几种方法:

方法 1:使用 int() 函数(转换为整数)
如果字符串表示的是十六进制数字(如 "1A"),可以用 int() 转换为十进制整数:
hex_str = "1A" hex_num = int(hex_str, 16) # 第二个参数 16 表示十六进制 print(hex_num) # 输出: 26
特点
- 返回的是整数(Python 中
int类型)。 - 适用于纯数字的十六进制字符串(如
"FF","deadbeef")。
方法 2:使用 bytes.fromhex()(转换为字节对象)
如果字符串是十六进制编码的字节(如 "48656c6c6f" 对应 "Hello"),可以用 bytes.fromhex():
hex_str = "48656c6c6f" byte_data = bytes.fromhex(hex_str) print(byte_data) # 输出: b'Hello'
特点
- 返回的是
bytes对象。 - 自动处理空格和大小写(如
"48 65"会被正确解析)。 - 适用于十六进制编码的二进制数据。
方法 3:手动转换为字节(灵活控制)
如果需要更灵活地处理(例如逐字节转换),可以手动解析:
hex_str = "1A2B3C" byte_data = bytes.fromhex(hex_str) # 方法同上 # 或者手动解析 byte_data_manual = bytes([int(hex_str[i:i+2], 16) for i in range(0, len(hex_str), 2)]) print(byte_data_manual) # 输出: b'\x1a:<' (对应 0x1A, 0x2B, 0x3C)
方法 4:处理带前缀的字符串(如 "0x1A")
如果字符串包含 "0x" 前缀,需先去除:

hex_str = "0x1A"
hex_num = int(hex_str, 16) if hex_str.startswith("0x") else int(hex_str, 16)
print(hex_num) # 输出: 26
| 需求 | 方法 | 示例 |
|---|---|---|
| 转换为整数 | int(hex_str, 16) |
int("1A", 16) → 26 |
| 转换为字节 | bytes.fromhex(hex_str) |
bytes.fromhex("48656c6c6f") → b'Hello' |
| 手动解析字节 | bytes([int(...)]) |
bytes([int("1A", 16)]) → b'\x1a' |
处理 0x 前缀 |
先去除前缀 | int("0x1A".replace("0x", ""), 16) |
选择合适的方法取决于你的具体需求!

