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:
Gibt es eine Erklärung dafür?
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