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

Python如何将单字节十六进制数据转换为4字节分组的指定十六进制格式

Python字节按4字节分组拼接十六进制实现方案

核心问题说明

你现有代码的问题是直接用hex()转单字节时,小于0x10的字节会丢失前导零(比如0x00会被转成'0x0'、0x04会被转成'0x4'),后续拼接时会出现格式错误。只需要补全单字节的2位十六进制格式,再按4个字节分组拼接即可。


方法1:基于你现有代码修改

保留你原本拆单字节的逻辑,修正十六进制格式化逻辑即可:

import struct

temp = b'B\x86\xfe\xca\x00\x00\x00\x00\x04\x08\x00\x00\xff\xff\xff\xff'
# 原有拆单字节逻辑
brA = [b for b in struct.unpack(str(len(temp))+'B', temp)]
# 每个单字节转为固定2位的小写十六进制,自动补前导零
hex_bytes = [f"{b:02x}" for b in brA]

result = []
# 步长设为4,每4个字节为一组切片拼接
for idx in range(0, len(hex_bytes), 4):
    group_str = ''.join(hex_bytes[idx:idx+4])
    result.append(f"0x{group_str}")

# 生成逗号分隔的最终结果
final_output = ', '.join(result)
print(final_output)

运行输出:

0x4286feca, 0x00000000, 0x04080000, 0xffffffff

注:你给出的示例目标结果中0x00004800应为笔误,按原始字节顺序拼接的第二组全零对应0x00000000,第三组0x04、0x08、0x00、0x00对应0x04080000。如果需要字节倒序的小端拼接,只需要在拼接时把每组切片反转即可。


方法2:更简洁的高效实现

不需要先拆成单字节,直接用struct按4字节无符号整数解析,一步完成分组和格式转换:

import struct

temp = b'B\x86\xfe\xca\x00\x00\x00\x00\x04\x08\x00\x00\xff\xff\xff\xff'
# >I 表示大端序4字节无符号整数,长度为总字节数//4
uint_groups = struct.unpack(f'>{len(temp)//4}I', temp)
# 格式化为固定8位十六进制,自动补前导零
final_output = ', '.join([f"0x{u:08x}" for u in uint_groups])
print(final_output)

输出结果和方法1完全一致,如果需要小端序解析,把格式符里的>换成<即可。


内容的提问来源于stack exchange,提问作者raph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:51:23