如何将整数列表转换为单个字节拆分的十六进制字符串?
解决方案
要实现将每个整数按双字节(16位)拆分,每个字节输出两位十六进制并以空格分隔的需求,有两种简洁的实现方式:
方法一:使用struct模块(推荐)
struct模块可以方便地将整数打包成指定字节长度的字节串,再逐个字节转换为十六进制格式:
import struct b = [12345, 6789, 7643, 1, 2] # 以大端序(高位字节在前)将每个整数打包为2字节无符号短整型 byte_sequence = b''.join(struct.pack('>H', num) for num in b) # 遍历每个字节,格式化为两位十六进制后用空格连接 output = ' '.join(f'{byte:02x}' for byte in byte_sequence) print(output)
运行结果:
30 39 1a 85 1d db 00 01 00 02
方法二:手动拆分高低字节
如果不想引入额外模块,可以通过位运算直接提取每个整数的高8位和低8位:
b = [12345, 6789, 7643, 1, 2] hex_parts = [] for num in b: # 提取高8位和低8位 high_byte = (num >> 8) & 0xFF low_byte = num & 0xFF # 分别格式化为两位十六进制 hex_parts.append(f'{high_byte:02x}') hex_parts.append(f'{low_byte:02x}') output = ' '.join(hex_parts) print(output)
同样会得到你期望的结果。
为什么之前的方法不符合需求?
你之前使用的format(v, '02x')是将整个整数直接转换为十六进制字符串,没有按字节拆分——比如整数12345的十六进制是0x3039,直接转换会得到3039,而不是拆分成两个独立的字节30和39。上面两种方法都先将整数拆分为单个字节,再分别格式化,完美解决了这个问题。
内容的提问来源于stack exchange,提问作者Opifex
相关产品推荐
相关产品推荐

