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

如何将小端(little endian)格式十六进制字符串转换为浮点数?

小端十六进制字符串转浮点数的正确实现

你的问题出在代码里使用了大端(>)格式符,而输入的十六进制字符串是小端存储的,只需将struct模块的格式符替换为小端标识<即可完成正确转换。

修改后的代码

import struct

hex_string = '00e0b8bf'
to_int = int(hex_string, 16)
# 用小端格式打包32位整数
struct_packed = struct.pack("<i", to_int)
# 用小端格式解包为单精度浮点数
to_float = struct.unpack("<f", struct_packed)[0]
print(to_float)  # 输出:-0.12345600128173828

原理说明

  1. 十六进制转整数的步骤无需改动,因为整数本身不存在端序概念。
  2. struct模块的格式符中,<代表小端字节序,i表示32位有符号整数,f表示32位单精度浮点数。
  3. 用<i打包整数时,会按照小端字节序生成字节流;再用<f解包时,同样以小端规则解析字节流为浮点数,完全匹配输入的小端十六进制格式。

另一种等价实现(反转字节顺序)

如果你不想修改格式符,也可以先反转十六进制字符串的字节顺序,再用大端格式处理:

import struct

hex_string = '00e0b8bf'
# 将十六进制按2字符一组拆分后反转,再拼接成新的十六进制字符串
reversed_hex = ''.join(reversed([hex_string[i:i+2] for i in range(0, len(hex_string), 2)]))
to_int = int(reversed_hex, 16)
struct_packed = struct.pack(">i", to_int)
to_float = struct.unpack(">f", struct_packed)[0]
print(to_float)  # 输出相同结果

两种方法效果一致,推荐第一种,直接通过格式符指定端序的方式更直观、易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:06:27