Little Endian gegen Big Endian

8

Sagen wir, ich habe 4 Byte und ich möchte es in 2Byte kurze Ganzzahl umwandeln. Habe ich recht, dass in beiden (Little und Big Endian) die kurze ganze Zahl aus 2 niedrigstwertigen Bytes dieser 4 Byte Zahl besteht?

Zweite Frage:
Was wird das Ergebnis eines solchen Codes im Little-Endian- und Big-Endian-Prozessor sein?

%Vor%

IMHO in Big-Endian-Prozessor 2 höchstwertigen Bytes würden kopiert werden, und in Little Endian 2 würden niederwertigste Bytes kopiert werden.

    
Tomek Tarczynski 11.02.2010, 21:12
quelle

5 Antworten

12
  

Bin ich richtig, dass in beiden kurzen Integer aus 2 niedrigstwertigen Bytes dieser 4-Byte-Integer bestehen?

Ja, per Definition.

Der Unterschied zwischen bigE und littleE ist, ob das niedrigstwertige Byte die niedrigste Adresse hat oder nicht. Auf einem kleinen Endian-Prozessor sind die niedrigsten Adressen die niedrigstwertigen Bits, x86 macht es auf diese Weise.

Diese ergeben das gleiche Ergebnis bei wenig E.

%Vor%

Auf einem Big-Endian-Prozessor sind die höchsten Adressen die niedrigstwertigen Bits, 68000 und Power PC machen es so (eigentlich kann Power PC beides sein, aber PPC-Maschinen von Apple verwenden bigE)

Diese geben das gleiche Ergebnis auf großen E.

%Vor%

Wie Sie also sehen können, erlaubt Little Endian Ihnen, die kleinsten signifikanten Bits eines Operanden zu erhalten, ohne zu wissen, wie groß er ist. Little E hat Vorteile, um die Rückwärtskompatibilität zu erhalten.

Was ist der Vorteil von Big Endian? Es erzeugt Hex-Dumps, die einfacher zu lesen sind.

Wirklich, die Ingenieure von Motorola dachten, dass die Entlastung beim Lesen von Hex-Dumps wichtiger ist als die Rückwärtskompatibilität. Die Ingenieure von Intel glaubten das Gegenteil.

    
John Knoeller 11.02.2010, 21:30
quelle
2
  1. Ja. Wenn Sie Werte konvertieren, müssen Sie sich keine Gedanken um Endianess machen.

  2. Ja. Wenn Sie Zeiger konvertieren, tun Sie das.

Seva Alekseyev 11.02.2010 21:15
quelle
1

Zuallererst magst du es bereits wissen, aber lass mich erwähnen, dass die Größe von int nicht garantiert 4 Bytes und die von kurzen 2 Bytes auf allen Plattformen ist.

Wenn Sie in Ihrer ersten Frage so etwas meinen:

%Vor%

dann ja, s enthält das untere Byte (s) von i .

Ich denke, die Antwort auf Ihre zweite Frage ist auch Ja; auf der Byte-Ebene kommt die Endianness des Systems ins Spiel.

    
Péter Török 11.02.2010 21:19
quelle
1

Sie sollten sich bewusst sein, dass Ihr zweites Beispiel

ist %Vor%

ist kein gültiger C-Code, da er strenge Aliasregeln verletzt. Es wird wahrscheinlich unter einigen Optimierungsebenen und / oder Compilern fehlschlagen.

Benutze dazu Vereinigungen:

%Vor%

Wie Sie bereits angemerkt haben, können Sie nicht davon ausgehen, dass Ihre Eingaben 4 Byte betragen. Verwenden Sie besser int32_t und int16_t, wenn Sie bestimmte Größen benötigen.

    
asr 11.02.2010 21:31
quelle
1

Wenn Sie wirklich ein int in ein short umwandeln wollen, tun Sie das einfach:

%Vor%

Sie müssen sich nicht einmal Gedanken um Endian machen, die Sprache erledigt das für Sie. Wenn Sie sicher sind, dass n innerhalb der Reichweite eines Kurzschlusses liegt, können Sie die Überprüfung ebenfalls überspringen.

    
Roger Pate 11.02.2010 21:34
quelle

Tags und Links