这是一种从我的最后一个问题,如果这可以帮助你

我定义几个CTYPE结构

class EthercatDatagram(Structure):
    _fields_ = [("header", EthercatDatagramHeader),
                ("packet_data_length", c_int),
                ("packet_data", POINTER(c_ubyte)),
                ("work_count", c_ushort)]

class EthercatPacket(Structure):
    _fields_ = [("ether_header", ETH_HEADER),
                ("Ethercat_header", EthercatHeader),
                ("data", POINTER(EthercatDatagram))]

请注意,这是通过蟒正确分析,缺少的类别处定义。 我的问题是,当我调用以下代码

packet = EthercatPacket()
ethercap.RecvPacket(byref(packet))
print packet.data.header

这是不正确。据我所知的问题,数据是某种指针,以便(真的)映射到EthercatDatagram它不是,因此,分析器不知道底层报头字段。

是有一些方法来读取该字段以及由POINTER所示的任何其他字段()?

有帮助吗?

解决方案 2

确定我得到它的工作

正确的代码是

print packet.data.header[0]

感谢7人谁也不敢看问题

的字符串谷歌的回答是:蟒CTYPE解除引用指针 第三命中

其他提示

方括号标记是确实是正确的。作为参考,下面是一些ctypes的代码,我最近做了一个片段:

class Message(Structure):
    _fields_ = [ ("id", BYTE), ("data", POINTER(BYTE)), ("data_length", DWORD) ]
    def __repr__(self):
        d = ' '.join(["0x%02X" % self.data[i] for i in range(self.data_length)])
        return "<Message: id = 0x%02X, " % (self.id) + "data_length = " + str(self.data_length) + (self.data_length > 0 and (", data: " + d) or "") + ">"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top