ctypes: return (und übergeben) von byte array mit null bytes
Verfasst: Freitag 3. September 2010, 16:02
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)
in python dann:
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?
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;
}
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
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?