Hallo,
ich komme hier einfach nicht mehr weiter. Ich will aus einer Datei an einer bestimmten Position mit fread in eine Struktur lesen. Diese beginnt mit einem WORD, welches eine ID erhält, dann kommt ein DWORD, welches die Größe einer anderen struct erhält.
OS ist WinXP, Compiler Borland C++Builder.
Sodale, die struct sieht also in etwa so aus:
An der richtigen Position in der Datei bin ich, und lese die struct also nun so:
f ist offensichtlich die Datei. 
Hat ja bis jetzt auch immer so geklappt, auch mit weitaus monströseren structs usw. usw. usw. keine Probleme gegeben.
Nun habe ich also mit einem Hex-Editor mal in die Datei gelunst, und habe für die ID einen Wert von 3. Der stimmt auch mit dem überein, was das Programm liest.
Aber den Wert für Groesse gibt das dumme Programm grundsätzlich mit 0x10000 an, wobei ich nunmal 150% weiß, dass er 0xAC sein muss. Das sagt der Hex-Editor, und dem vertraue ich in diesem Fall.
Was mich nur total aufregt ist, dass folgender Code die Groesse richtig ausliest, wobei er doch eigentlich nichts anderes macht (außer eben die Werte einzeln lesen, oder irre ich mich da...? Vielleicht ist auf Grund der fortgeschrittenen Tageszeit mein Hirn schon etwas angematscht):
Nebenbei bin ich dann in der Borland-Hilfe auf so einen Kram wie Data Alignment gestoßen und frage mich, ob das was damit zu tun haben kann. Es war offensichtlich auf 4-Byte eingestellt, habe das mal probeweise auf 2-Byte bzw. 1-Byte (also ausgeschaltet) eingestellt, hat aber nicht geholfen.
Ich wäre doch sehr dankbar für einen hilfreichen Tip!
Bye,
randomize
ich komme hier einfach nicht mehr weiter. Ich will aus einer Datei an einer bestimmten Position mit fread in eine Struktur lesen. Diese beginnt mit einem WORD, welches eine ID erhält, dann kommt ein DWORD, welches die Größe einer anderen struct erhält.
OS ist WinXP, Compiler Borland C++Builder.
Sodale, die struct sieht also in etwa so aus:
Code:
struct
{
WORD ID;
DWORD Groesse;
} s;
Code:
fread (&s, sizeof (s), 1, f);

Hat ja bis jetzt auch immer so geklappt, auch mit weitaus monströseren structs usw. usw. usw. keine Probleme gegeben.
Nun habe ich also mit einem Hex-Editor mal in die Datei gelunst, und habe für die ID einen Wert von 3. Der stimmt auch mit dem überein, was das Programm liest.
Aber den Wert für Groesse gibt das dumme Programm grundsätzlich mit 0x10000 an, wobei ich nunmal 150% weiß, dass er 0xAC sein muss. Das sagt der Hex-Editor, und dem vertraue ich in diesem Fall.
Was mich nur total aufregt ist, dass folgender Code die Groesse richtig ausliest, wobei er doch eigentlich nichts anderes macht (außer eben die Werte einzeln lesen, oder irre ich mich da...? Vielleicht ist auf Grund der fortgeschrittenen Tageszeit mein Hirn schon etwas angematscht):
Code:
fread (&s.ID, sizeof (s.ID), 1, f);
fread (&s.Groesse, sizeof (s.Groesse), 1, f);
Ich wäre doch sehr dankbar für einen hilfreichen Tip!
Bye,
randomize