You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将整数列表转换为单个字节拆分的十六进制字符串?

解决方案

要实现将每个整数按双字节(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:25:14