Wie bekomme ich Centypes Typ Objekt aus einem Ctypes Array

Tatsächlich versuche ich, Ctypes Arrays zu Pythonlisten und zurück zu konvertieren.

Wenn ich diesen Thread gefunden habe . Aber es geht davon aus, dass wir den Typ zum Zeitpunkt der Kompilierung kennen.

Aber ist es möglich, einen Ctypes-Typ für ein Element abzurufen?

Ich habe eine Python-Liste, die mindestens ein Element enthält. Ich möchte so etwas machen

import ctypes arr = (type(pyarr[0]) * len(pyarr))(*pyarr) 

Dies funktioniert offensichtlich nicht, weil type() keine ctypes kompatible Klasse zurückgibt. Aber auch wenn die Liste direkt aus Ctypes erstellt wird, funktioniert der obige Code nicht, weil es sich um eine Objektinstanz des Typs handelt.

Gibt es eine Möglichkeit, diese Aufgabe zu erfüllen?

[BEARBEITEN]

Ok, hier ist der Code, der für mich arbeitet. Ich benutze es, um Eingabedatare von Comtypes-Server-Methode in Python-Listen umzuwandeln und Werte auf Array-Zeiger zurückzugeben:

 def list(count, p_items): """Returns a python list for the given times represented by a pointer and the number of items""" items = [] for i in range(count): items.append(p_items[i]) return items def p_list(items): """Returns a pointer to a list of items""" c_items = (type(items[0])*len(items))(*items) p_items = cast(c_items, POINTER(type(items[0]))) return p_items 

Wie bereits erwähnt, benötigt p_list(items) mindestens ein Element.

One Solution collect form web for “Wie bekomme ich Centypes Typ Objekt aus einem Ctypes Array”

Ich glaube nicht, dass das direkt möglich ist, weil mehrere Ctypes Typen auf einzelne Python-Typen abbilden. Zum Beispiel c_int / c_long / c_ulong / c_ulonglong alle Karte zu Python int. Welchen Typ würdest du wählen? Sie können eine Karte Ihrer Präferenzen erstellen:

 >>> D = {int:c_int,float:c_double} >>> pyarr = [1.2,2.4,3.6] >>> arr = (D[type(pyarr[0])] * len(pyarr))(*pyarr) >>> arr <__main__.c_double_Array_3 object at 0x023540D0> >>> arr[0] 1.2 >>> arr[1] 2.4 >>> arr[2] 3.6 

Auch das undokumentierte _type_ kann den Typ eines Ctypes Arrays erkennen.

 >>> arr._type_ <class 'ctypes.c_double'> 
  • Python: Verwirrung zwischen Typen und Dtypen
  • Speichern Sie unterschiedliche Datentypen in einem NumPy-Array?
  • Fehler bei der Verwendung von Ctypes-Modul, um eine DLL in C zu schreiben
  • Was ist der Unterschied zwischen Typ und Typ .__ new__ in python?
  • "Werttyp" aus einem String in Python bestimmen
  • Was ist der Unterschied zwischen alten Stil und neuen Stil Klassen in Python?
  • Der Wahrheitswert des numpy Arrays mit einem falschen Element scheint von dtype abhängig zu sein
  • TypeError: nicht unterstützter Operand Typ (s) für /: 'str' und 'int'
  • Richtige Methode zur Erkennung von Sequenzparametern?
  • Wie prüft man, ob Typ einer Variable String ist?
  • Funktionale Datentypen in Python
  • Python ist die beste Programmiersprache der Welt.