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

Python使用ctypes映射32位内存值到结构体遇异常,求解决方案

内存映射结构体的问题及字段结构求解

原始问题

给定32位值组成的内存列表:

[0x7E008000, 0x1234AAAA, 0xBBBBFFFF]

预期将其映射为结构体后输出:

ns: 0x7d008000
us: 0x1234
zs: 0xaaaabbbb
crc: 0xffff

但现有代码得到的zs值不符合预期,启用crc字段时还会报错,当前代码输出:

ns: 0x7d008000
us: 0x1234
zs: 0xbbbbffff

对应的实现代码如下:

import struct
import ctypes

class MemoryParser:
    @classmethod
    def parse_memory(cls, memory):
        memory_bytes = bytearray()

        for word in memory:
            # 将32位值转换为大端字节
            word_bytes = struct.pack(">I", word)
            memory_bytes.extend(word_bytes)

        # 创建ctypes字节缓冲区
        ubuffer = (ctypes.c_ubyte * len(memory_bytes)).from_buffer(memory_bytes)

        # 从缓冲区生成结构体实例
        return cls.from_buffer(ubuffer)

class Data(MemoryParser, ctypes.BigEndianStructure):
    _fields_ = [("ns", ctypes.c_uint32),
                ("us", ctypes.c_uint16),
                ("zs", ctypes.c_uint32)]
                #("crc", ctypes.c_uint16)]

memory = [0x7E008000, 0x1234AAAA, 0xBBBBFFFF]

data = Data.parse_memory(memory)

print("ns:", hex(data.ns))
print("us:", hex(data.us))
print("zs:", hex(data.zs))
#print("crc:", hex(data.crc))

更新1:新增数据集的字段结构求解

新的内存列表:

[0x7E008000, 0x1234AAAA, 0xBBBBFFFC, 0xCCCDDEEE]

预期映射后的结构体输出为:

v1 = 0x7E008000
v2 = 0x1234
v3 = 0xAAAABBBB
v4 = 0xFFF
v5 = 0xCCCC
v6 = 0xDD
v7 = 0xEEEE

需要给出对应的ctypes结构体字段定义。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:07:06