Python pridanie dat do c_ubyte_Array_

Python pridanie dat do c_ubyte_Array_
« kdy: 08. 03. 2021, 20:45:22 »
Zdravim.
Mam toto
Kód: [Vybrat]
from ctypes import *
...
...
DFSD_DATA_BLOCK_SIZE = 36
myDataBufe = c_uint8 * DFSD_DATA_BLOCK_SIZE
myData = myDataBufe()
#Array with a hex in string to int
for x in Data_buffer:
      hex_int = int(x, 16)
      myDataBufe.append(hex_int)
ale samozrejme to spadne na AttributeError: type object 'c_ubyte_Array_36' has no attribute 'append'
co pouzit namiesto append pre c_ubyte? resp. ako "pridat/vymenit" data pre c_ubyte_Array?


Re:Python pridanie dat do c_ubyte_Array_
« Odpověď #1 kdy: 08. 03. 2021, 21:08:49 »
Nekolik veci:

a] Urcite potrebujes 'ctypes'? Mam pocit, ze 'struct' by stacilo.

b] Bud od te dobroty a nezakladej dalsi a dalsi vlakna.

c] Najdi si laskave nejaky tutorial na praci s binarnima datama.

Re:Python pridanie dat do c_ubyte_Array_
« Odpověď #2 kdy: 08. 03. 2021, 21:22:45 »
Když přehlédnu, že kód nevypadá zrovna moc Pythonovsky (import všeho z ctypes, názvy proměnných), tak:

myDataBufe = c_uint8 * DFSD_DATA_BLOCK_SIZE  # definuješ typ, tady pole unsigned char pevné velikosti
myData = myDataBufe()  # vytvoříš instanci, tj. teprve tady si alokuješ v paměti pole a instanci přiřadíš do proměnné
...
myDataBufe.append(hex_int)  # to spadne už jen z důvodu, že do typu chceš přidat položku
myData.append(hex_int)  # asi to bylo myšleno takto, ale to taky spadne, protože pole není dynamické (jako list v Pythonu), ale pevné velikosti
myData[0] = 123  # takže s tím pracuj jako s polem, na pozici 0 dáme 123, to funguje
myData[1] = 345  # na pozici 1 dáme 345, to sice projde, ale co se stane?
list(myData)  # mělo by tam být 345, ale je tam 89, pozor na přetečení/podtečení, v ctypes už Python chyby neodpustí