Seite 1 von 1

ctypes: return (und übergeben) von byte array mit null bytes

Verfasst: Freitag 3. September 2010, 16:02
von Francesco
Hallo,
ein Problem, wo ich schon länger herumprobiere:

Wenn ich aus einer C/C++ Funktion ein byte array zurückliefern will, gehe ich folgendermassen vor:

zb Auszug aus C: (Werte habe ich jetzt direkt gesetzt, um leichter testen zu können)

Code: Alles auswählen

char read_buffer [1024];
DLLEXPORT char* StorageReadString(int offset, int size)
{
  read_buffer[0] = 'a';
  read_buffer[1] = 'b';
  read_buffer[2] = '\0';
  read_buffer[3] = 'a';
  read_buffer[4] = '\0';
  return read_buffer;
}
in python dann:

Code: Alles auswählen

mydll.StorageReadString.restype = ctypes.c_char_p
str = mydll.StorageReadString(offset, size)
for i in range(size):
    print i, ord(str[i])
return str
Jetzt schneidet er ab dem ersten Null byte weg, und übrig bleibt dann "ab". Wie kann ich erreichen, dass er alle Bytes zurückliefert? Und dann habe ich ab dem dritten Byte natürlich einen index error.

Er müsste das nicht als string sehen, sondern als allgemeines byte array. Aber wie mache ich das in ctypes?

Zusatzfrage: Wie kann ich so ein array mit Nullbytes an C mit ctypes überreichen?

Re: ctypes: return (und übergeben) von byte array mit null b

Verfasst: Freitag 3. September 2010, 16:36
von Francesco
Ah, ich glaube ich komme dem ganzen doch etwas näher.

Anscheinend hat man doch die Möglichkeit als restype einen pointer anzugeben, in der Art von:
<meine c funktion>.restype = ctypes.POINTER(ctypes.c_byte) zb

Ja, so funktioniert das.