johannes schrieb:
> ich habe folgende struct:struct header
> {
> uint32_t size;
> uint16_t offset;
> char name[6];
> };
>
> Und eine Datei, die genau so formatiert ist wie die struct header.
Sicher? beim PC würde ich fast wetten das zwischen offset und name 2
Padding Bytes eingeschoben werden. Ausserdem hat der PC eine Little
endian Darstellung. Das ist auch nicht unbedingt das was man tippen
würde wenn man die Datei Manuell Bearbeitet. Spezifizier doch mal die
Datei und das System auf denn du Arbeitest. Dann können wir dir sicher
besser Helfen,
Intressant ist zum beispiel wie die Formatierungs in der datei sind
fälle wie size =31 ,offset =2 steht das nun als 312 in der Datei oder
als
31 2 oder 31\n 2\n und wenn da 312 steht,wie unterscheidest du das nun
von size 3 offset 12 ( Ich weiß das das unlogisch ist! aber dein
Programm ggf. nicht.)
generell hilft es wahrscheinlich für eine Quick and Dirty lösung den
Kompiler zu sagen das man die struct packet haben will und die Zahlen
mit führenden Nullen zu speichern, und die fehlenden Buchstaben des
Namens mit '\0' zu füllen.
beim gcc geht das gepackt so :
1 | struct header
|
2 | {
|
3 | uint32_t size;
|
4 | uint16_t offset;
|
5 | char name[6];
|
6 | } __attribute__((packed)) ;
|
das könnte man wahrscheinlich mit denn Führenden Nullen bei den Zahlen
und den '\0' bei den Name einfach so in den Speicher Der Struktur
Kopieren. Gegeben falls müssen noch die Endianess beachtet und
umgemodelt werden,