Python中如何将十六进制值0x1180转换为0x80 0x11格式?
Python中实现十六进制小端格式转换的最优方法
核心思路
你的需求本质是将数值转换为小端字节序(Little-Endian)的十六进制表示——原十六进制0x1180对应两个字节(0x11和0x80),小端模式要求低字节0x80在前,高字节0x11在后。
方法一:使用int.to_bytes()(推荐,Python 3+原生方法)
这是最简洁的原生实现,直接通过指定字节数和字节序完成转换:
num = 4480 # 转换为2字节的小端字节串 little_endian_bytes = num.to_bytes(length=2, byteorder='little') # 格式化每个字节为0xXX的形式并拼接 result = ' '.join(f'0x{b:02X}' for b in little_endian_bytes) print(result) # 输出: 0x80 0x11
- 解释:
to_bytes(length=2, byteorder='little')将整数转为2字节的小端字节串(结果为b'\x80\x11'),再通过格式化遍历每个字节,最终拼接成目标格式。
方法二:使用struct模块(适合复杂数据场景)
如果需要处理多类型数据(如浮点数、多字节整数),struct模块的灵活性更强:
import struct num = 4480 # 用<H格式(小端+无符号短整数)打包为字节串 packed = struct.pack('<H', num) # 格式化输出 result = ' '.join(f'0x{b:02X}' for b in packed) print(result) # 输出: 0x80 0x11
- 解释:
<代表小端字节序,H代表2字节无符号短整数,struct.pack直接生成符合要求的字节串。
关于“反向拼接函数”
Python没有专门命名为“反向拼接”的函数,但上述两种方法本质就是实现了字节序反转的效果。如果非要手动处理十六进制字符串(不推荐,易出错),可以这么写,但仅适用于固定长度的十六进制值:
hex_str = hex(4480)[2:] # 得到'1180' # 按两位分组后反转拼接 reversed_hex = ' '.join(f'0x{hex_str[i:i+2]}' for i in reversed(range(0, len(hex_str), 2))) print(reversed_hex) # 输出: 0x80 0x11
这种方法无法自适应不同字节长度的数值,因此优先选择基于数值转换的前两种方法。
内容的提问来源于stack exchange,提问作者wanwan
相关产品推荐
相关产品推荐

