CType 포인터를 Python 클래스로 읽고 복사하는 방법은 무엇입니까?
문제
이것은 일종의 후속 조치입니다 내 마지막 질문 이것이 당신을 도울 수 있다면.
몇 가지 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))]
이것은 Python에 의해 올바르게 구문 분석되며 누락 된 클래스는 다른 곳에 정의됩니다. 내 문제는 다음 코드를 호출 할 때입니다
packet = EthercatPacket()
ethercap.RecvPacket(byref(packet))
print packet.data.header
이것은 잘못되었습니다. 문제를 이해 하듯이 데이터는 일종의 포인터이므로 Ethercatdatagram에 (실제로) 맵핑되지 않으므로 구문 분석기는 기본 헤더 필드를 알지 못합니다.
Pointer ()로 표시되는 다른 필드뿐만 아니라 해당 필드를 읽을 수있는 방법이 있습니까?
해결책 2
알았어
올바른 코드였습니다
print packet.data.header[0]
감히 질문을 보려고 한 7 명에게 감사드립니다.
답을위한 Google 문자열은 다음과 같습니다. Python Ctype Dereference Pointer 3rd Hit
다른 팁
제곱 브래킷 표기법은 실제로 정확합니다. 참고로, 여기에 내가 최근에 만든 일부 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 "") + ">"
제휴하지 않습니다 StackOverflow