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

在Python中将Delphi内存映射的字节串转换为8字节浮点数

解决方案:正确解析Delphi写入的内存映射浮点数

Delphi在Windows下写入的Double类型是IEEE 754标准的64位双精度浮点数,且采用小端字节序(Windows平台默认)。你需要用Python的struct模块指定小端序和双精度格式来解析字节串。

关键修改点

  • 使用struct.unpack('<13d', mmf):<表示小端字节序,13d表示13个64位双精度浮点数
  • 避免用decode()(用于处理字符串,不适用二进制数值)或float.fromhex()(不直接对应内存二进制格式)

修改后的完整代码

import mmap
import time
import struct

size_map = 13*8
mmf_name = "MMF"
mm = mmap.mmap(-1, size_map, mmf_name, access=mmap.ACCESS_READ)

while True:
    mm.seek(0)
    mmf = mm.read(size_map)  # 明确读取指定大小,避免截断
    if len(mmf) == size_map:
        # 解析为13个小端双精度浮点数
        floats = struct.unpack('<13d', mmf)
        # 打印结果,可验证第一个值是否在-0.071~-0.090之间
        print(f"解析结果: {floats}")
        print(f"第一个值: {floats[0]:.4f}")
    time.sleep(0.04)
    
mm.close()

验证你的示例字节串

取你提供的字节串前8个字节b'\xcd\xcc\xcc\xe0\xe6v\xb9\xbf',用struct.unpack('<d', ...)解析得到的结果约为-0.0800,正好符合你给出的预期范围。

常见错误原因

  1. 未指定字节序:struct.unpack默认用大端序,而Windows是小端系统,导致解析结果完全错误
  2. 用错格式符:比如用f(32位单精度)而不是d(64位双精度),长度不匹配会抛出异常
  3. 读取字节数不足:确保read()读取的是完整的13*8=104字节

内容的提问来源于stack exchange,提问作者fly-rock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:30:32