Seite 1 von 1

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

Verfasst: Samstag 15. Mai 2010, 17:05
von Benja
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 :(

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

Verfasst: Samstag 15. Mai 2010, 17:08
von Leonidas
Ich glaube du suchst einfach die Hex-Schreibweise für Binärdaten:

Code: Alles auswählen

bytedump = '\x12\x23'

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

Verfasst: Samstag 15. Mai 2010, 17:32
von 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.

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

Verfasst: Samstag 15. Mai 2010, 18:44
von Benja
Danke, mit binascii.unhexlify und ctypes.memmove klappt das jetzt so wie ich es mir vorgestellt habe.