Questions for real experts
-
#include <stdio.h> int main() { int x=1; if(*(char*)&x) printf("Little endian"); else printf("Big endian"); }
Ich fuehre diesen Code auf einem X86 Intel prozessor aus aber auch auf einem mips Prozessor welcher Big endian ist. Obwohl mein mips Prozessor (MIPS 74K V4.0) Big endian ist bekomme ich trotzdem Little angezeigt.
Warum????
-
Eventuell haben int und char die gleiche Größe/Länge.
-
nein definitiv nicht
-
Laut Internet: Broadcom BCM4718, 453MHz, MIPS 74K V4.0 (Inc. DSP Rev2, MIPS16), Little Endian
-
Dann ist es klar. In wikipedia hatte man den Eindruck alle mips sind Big endian. Wieso gibt es da keinen Standard. Ich seh jetzt keinen Fall wo man unbedingt den Big Endian zuerst im Speicher haben muss.
-
blurry333 schrieb:
Wieso gibt es da keinen Standard. Ich seh jetzt keinen Fall wo man unbedingt den Big Endian zuerst im Speicher haben muss.
Das Dezimalsystem ist ja auch Big-Endian.
Frag mal die Engländer und Japaner, wer auf der falschen Seite Auto fährt
-
Network byte order ist auch Big-Endian. Generell macht es bei IP auch insofern mehr Sinn, als dass per Konvention die signifikanteren Bytes einer Adresse Subnetze beschreiben, man also mitunter an den niedrigen nicht interessiert ist. Dadurch haben Big-Endian-Syteme bei Netzwerkcode die Nase vorn, weil sie ihre Integer nicht dauernd umstellen müssen.
Umgekehrt sind bei Little-Endian natürlich Casts zwischen Integertypen verschiedener Länge billiger zu haben.
Übrigens ist die Lage noch etwas komplizierter: Es gibt sog. middle-endian-Systeme, beispielsweise die PDP:
ABCD <-- Little Endian DCBA <-- Big Endian BADC <-- PDP-middle-endian
...also etwa so, wie die Amerikaner Kalenderdaten schreiben.
Ferner gibt es Systeme, die zwischen den Endians wechseln können; zu diesen zählt auch MIPS. Wahrscheinlich kannst du deinem Compiler eine Option mitgeben, die das kontrolliert.
-
Danke fuer eure Hilfe.
MIPS steht fuer Big endian
MIPSel steht fuer little endian .
-
Nein, nein, das hast du falsch verstanden. Bei fast allen MIPS-Prozessoren ist der Endian umschaltbar.
MIPSel bezeichnet lediglich die Benutzung von MIPS mit Little-Endian (oder die kleine Anzahl MIPS-Prozessoren, die nur little endian können), gegenübergestellt findet man manchmal (selten) die Bezeichnung MIPSeb für die Verwendung von MIPS mit Big-Endian. MIPS allein impliziert keinen Bytesex, weil es quasi ein Hermaphrodit ist.
Wenn du mal in die gcc-Manpage kuckst, findest du da für MIPS zwei Optionen -EL und -EB, die das Verhalten zur Compilezeit festlegen. Prinzipiell wäre es sogar möglich, zur Laufzeit hin- und herzuschalten; ich weiß aber nicht, ob es für solche Spielereien vernünftige Toolkits gibt und ob sich ggf. der Aufwand lohnt. Es wäre ja ziemlich leicht, damit durcheinanderzukommen.
-
DirkB schrieb:
Frag mal die Engländer und Japaner, wer auf der falschen Seite Auto fährt
Natürlich der, der mir auf meiner Seite entgegen kommt.
-
rllr schrieb:
DirkB schrieb:
Frag mal die Engländer und Japaner, wer auf der falschen Seite Auto fährt
Natürlich der, der mir auf meiner Seite entgegen kommt.
Und wenn Dir gefühlte 99,9% aller Autofahrer auf "Deiner" Spur entgegenkommen? ;o)
Randnotiz: Auf der A9 in Nähe Bayreuth wurde die letzten Jahre immer wieder an einer überregional bekannten Stelle ein Auto mit englischem Kennzeichen und Lenkrad auf der "falschen" Seite geblitzt. Der Fahrzeugführer konnte m.W. nicht belangt werden, weil die Kamera der Messanlage auf die Fahrerseite ausgerichtet war - dort saß aber eine 1,80m große Ernie-Figur (Sesamstraße), die nach bisherigem Stand der Ermittlungen als Verursacher der Ordnungswidrigkeit nicht in Frage kommt.So einfach wird also manchmal aus der "falschen" die "richtige" Seite oder in Blöd 2.0 ausgedrückt der "fail" zum "win"
-
Für solche Anwendungsfälle ist es natürlich praktisch, auf jeder Seite ein Lenkrad zu haben. Womit wir wieder bei MIPS wären.