2014-10-20 7 views
5

Ich habe ein Array char c[12] = {'a','b','c','d','e','f','g','h','0','1','2','3'} In hexadezimal diese Werte {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x30, 0x31, 0x32, 0x33}Wird ein char-Array in Ordnung in einem Little-Endian oder Big-Endian-System unterscheidet

sein würden, was ich habe mich gefragt, ob das Array anders im Speicher abgelegt werden würde in ein Big-Endian- oder Little-Endian-System?

Ich dachte, dass sie die gleichen wären, weil die Endian-Systeme arbeiten, indem sie bestimmen, wie man ein Element durch die kleinsten oder höchstwertigen Bits eines einzelnen Elements im Array speichert und die Bytes sortiert, aber da ein Zeichen nur ein ist Einzelbyte sortieren sie die Bytes auf die gleiche Weise.

+0

"Ein Beispiel für Middle-Endianess ist das amerikanische Datumsformat." ([bad src] (https://en.wikipedia.org/wiki/Endianess#Middle)) – Daniel

Antwort

8

Denken Sie darüber nach, was "Big Endian" und "Little Endian" bedeutet.

Speicher ist eine Sequenz (oder auf interessanter Maschinen, mehrere Sequenzen) von Bytes. Für Objekte, die zwei oder mehr Bytes groß sind, können die Bytes des Objekts in verschiedenen Ordnungen gespeichert werden, und die zwei offensichtlichsten Ordnungen heißen "big endian" und "little endian" (wenn Sie drei oder mehr Bytes haben) , dann gibt es mehr als zwei mögliche Byte-Reihenfolgen, und überhaupt, wer sagt, dass die Bits eines int zum Beispiel nicht über mehrere Bytes in einer chaotischen, aber festen Reihenfolge verteilt werden können?)

Aber für eine Folge von Bytes, Die Reihenfolge der Bytes ist die Reihenfolge der Bytes. "Big Endian" und "Little Endian" wird durch die Art definiert, in der die Bits eines größeren Elements in einem Array von Bytes angeordnet sind. Für eine Folge von Bytes werden sie in der Reihenfolge gespeichert, in der sie gespeichert sind - es gibt keine Möglichkeit für eine andere Reihenfolge. Es ist wie die Frage "Könnten die Zahlen 1, 2, 3, 4 etwas anders sein als die Zahlen 1, 2, 3, 4?" Und natürlich können sie nicht.

1

Char Arrays sind die gleichen auf jedem vernünftigen System, das Sie jemals begegnen werden. Es sind die Multi-Byte-Datentypen, die unterschiedliche Reihenfolge haben. Systeme, die eine ungerade Endlichkeit der Bits aufweisen, existierten in der Vergangenheit, aber ich denke nicht, dass irgendwelche davon mehr gemacht werden.

+0

Wie würden Sie "ungerade Endianität der Bits" erkennen? Wie könnten Sie ein "unvernünftiges" System haben, bei dem Bytes nicht in der Reihenfolge ihrer Bestellung geordnet sind? – gnasher729

2

Die Bytes müssen in der Reihenfolge, in der Sie sie definiert haben, aufsteigende Speicheradressen haben (wie von Ihrem C-Programm erkannt).

3

Das char/Byte ist per Definition die kleinste adressierbare Speichereinheit. Folglich gibt es kein sinnvolles Konzept der "Endianness" innerhalb eines einzelnen Bytes, da der Prozessor nicht darin indexieren kann; es kann nur die ganze Sache lesen. Einzelne Bits innerhalb eines Bytes werden durch mathematische Operationen und nicht durch Adressierung erhalten; ihr physischer Standort hat nichts damit zu tun, wie sie gelesen werden. Endianness bezieht sich nur auf Multi-Byte-Objekte, die indexierbare und somit physikalisch geordnete Unterkomponenten haben.

Per Definition hat ein Array Elemente in nur einer Reihenfolge, andernfalls würden die Indizierungsoperationen fehlschlagen, so dass die Begriffe der Endianness für größere Typen, die hypothetisch denselben Raum belegen könnten, ebenfalls nicht relevant sind, da sie die Arrays zerstören würden Zugriffsregeln.

Verwandte Themen