Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Wangarad 08. 03. 2021, 20:45:22
-
Zdravim.
Mam toto
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?
-
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.
-
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í