Problem char Arrays zu int zu casten


HEP

Member
Joined
Dec 25, 2006
Messages
188
Hallo!
Ich versuche gerade den Linux-Port von Heretic für GP2X zu kompilieren. Leider gibt es da ein sehr seltsames Problem, und zwar: An vielen Stellen im Code werden Datentypen nicht eingehalten und stattdessen wild herumgecastet. So zum Beispiel auch in einer Funktion in der Strings mit genau 8 Zeichen verglichen werden sollen. Dazu wird der String in zwei Hälften geteilt und jede Hälfte zu einem int gecastet. Weil die Anzahl der Bytes bei einem int ja (wegen 32-Bit-Architektur) 4 Byte ist, kann man das ja auch machen (obwohl ich es für sehr schlechten Stil halte und es wahrscheinlich noch aus dem Original-Code stammt, der wahrscheinlich so für die Uralt-PCs optimiert werden sollte). Naja, um zum Punkt zu kommen: Es funktioniert komischerweise nicht und ich kann es mir überhaupt nicht erklären, warum.

Ein Beispiel:
Code:
char[5] name = "FONT";
// Sieht als Bytefolge so aus: 46 4F 4E 54
// Das wird dann so gecastet
int test = *(int*)name;
// Wonach dann folgende Anweisung
printf("%08X", test");
// Aufgrund von Little-Endian eigentlich 544E4F46 ergeben müsste
// Da kommt aber was abgeschnittenes und durchgemischtes raus
Gibt es eine Erklärung dafür?
 
Was kommt denn in dem vorliegenden Beispiel als Ergebnis?
 
Müsste ich jetzt alles nochmal testen, ich glaube aber das Ergebnis im vorliegenden Fall war 00000146. Also ein Byte stimmt komischerweise.

EDIT: Ich habe es nochmal gestestet: Bei dem Beispiel kommt 00000046 raus.[/b]
 
Back
Top