[C] Wie Dump eines Byte-Arrays an eine Struktur zuweisen?

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Benja
User
Beiträge: 5
Registriert: Dienstag 4. Juli 2006, 12:00

Hallo

Geht um ctypes...

Ich habe als Dump ein Byte-Array vorliegen. Das sieht ungefähr so aus: 123456789012345678901234567890 und ist 500 Byte lang.

Das möchte ich gern möglichst einfach an eine existierende Struktur anhängen.

Code: Alles auswählen

bytedump = 123456789012345678901234567890

class Header(BigEndianStructure):
    _pack_   = 1
    _fields_ = ( ("Version", char),
                 ("Type", char),
                 ("dump", 500 * char),
               )
Ich stelle mir (vielleicht etwas naiv?) vor, dass es doch irgendwie gehen muss sowas anzustellen? Ich scheitere zur Zeit an der Definition von bytedump bzw. daran wie ich Python beibringe, dass es sich hier um einen dump handelt dem ich in einem Stück (und nicht byte-weise) den ganzen Inhalt zuordnen will.

Ich will im Prinzip anschließend einfach das was in bytedump steht in Header.dump kopieren.

ACHTUNG: bytedump ist kein String sondern wirklich der ausgelesene Inhalt eines Speicherbereiches.

Kann mir jemand auf die Sprünge helfen? Ich steh gerade aufm Schlauch :(
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich glaube du suchst einfach die Hex-Schreibweise für Binärdaten:

Code: Alles auswählen

bytedump = '\x12\x23'
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@Benja: Und vielleicht fehlt ein wenig Verständnis denn ein String (`str`) ist ja auch einfach nur eine Bytefolge die irgendwo im Speicher steht. Darum verstehe ich nicht was Du mit Deinem "ACHTUNG" meinst!?

Falls Deine lange "Zahl" da eigentlich zwei zeichen pro Byte in Hexdarstellung sind, solltest Du mal einen Blick ins `binascii`-Modul werfen.
Benja
User
Beiträge: 5
Registriert: Dienstag 4. Juli 2006, 12:00

Danke, mit binascii.unhexlify und ctypes.memmove klappt das jetzt so wie ich es mir vorgestellt habe.
Antworten