New Immissions/Updates:
boundless - educate - edutalab - empatico - es-ebooks - es16 - fr16 - fsfiles - hesperian - solidaria - wikipediaforschools
- wikipediaforschoolses - wikipediaforschoolsfr - wikipediaforschoolspt - worldmap -

See also: Liber Liber - Libro Parlato - Liber Musica  - Manuzio -  Liber Liber ISO Files - Alphabetical Order - Multivolume ZIP Complete Archive - PDF Files - OGG Music Files -

PROJECT GUTENBERG HTML: Volume I - Volume II - Volume III - Volume IV - Volume V - Volume VI - Volume VII - Volume VIII - Volume IX

Ascolta ""Volevo solo fare un audiolibro"" su Spreaker.
CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Byte-Reihenfolge - Wikipedia

Byte-Reihenfolge

aus Wikipedia, der freien Enzyklopädie

Bei einem Computer ist der Speicher in kleine Einheiten aufgeteilt, die als Byte bezeichnet werden. Soll ein Zahlenwert, der größer als die Speicherkapazität eines Byte ist, im Speicher abgelegt werden, so muss der Wert auf mehrere (normalerweise nebeneinanderliegende) Byte verteilt werden. Es gibt mehrere Möglichkeiten, die einzelnen Byte eines solchen Zahlenwerts im Speicher anzuordnen. Die beiden wichtigsten davon werden Big Endian, Big Endian First (wörtlich: „Groß-Endender zuerst“) oder auch Motorola-Format und Little Endian, Little Endian First (wörtlich: „Klein-Endender zuerst“) oder auch Intel-Format genannt.

Inhaltsverzeichnis

[Bearbeiten] Beispiel im Hexadezimalsystem

Dieser Artikel oder Abschnitt ist unverständlich formuliert. Eine konkrete Begründung findet sich auf der Diskussionsseite des Artikels oder in der Versionsgeschichte.
Hex-Darstellung 0xA4B3C2D1
Speicheradresse 50 51 52 53
Speicheroffset (Nummer) 0 1 2 3
Little Endian D1 C2 B3 A4
Big Endian A4 B3 C2 D1

Nehmen wir im folgenden als Beispiel den 32-Bit-Integer-Wert mit der hexadezimalen Darstellung 0xA4B3C2D1.

Wenn wir die 4 Byte in der Reihenfolge D1 C2 B3 A4, also das niedrigstwertige Byte an der niedrigsten Speicheradresse ablegen, spricht man von Little Endian. Eingeführt wurde diese Byte-Reihenfolge beispielsweise mit dem 6502, der NEC-V800-Reihe oder den Intel-x86-Prozessoren.

Die Speicherung in der Reihenfolge A4 B3 C2 D1, also das höchstwertige Byte an der niedrigsten Speicheradresse, wird als Big Endian bezeichnet. Verwendet wird diese Byte-Reihenfolge beispielsweise bei der Motorola-6800- sowie der Motorola-68000- bzw. -Coldfire-Familie, dem PowerPC (welcher jedoch bei einigen Modellen auch in Little-Endian umgeschaltet werden kann) oder den Prozessoren der z/Series und Sun SPARC CPUs. Die von Hewlett-Packard und Intel gemeinsam entwickelte IA-64-Architektur beherrscht ebenfalls beide Byte-Reihenfolgen. Dies erleichtert die Portierung bereits bestehender Betriebssysteme, insbesondere von HP-UX (Big Endian) als auch Windows (Little Endian) auf derselben Architektur.

Einige ältere Systeme speicherten die Daten in der Reihenfolge C2 D1 A4 B3 oder auch B3 A4 D1 C2, beides wird als Middle Endian bezeichnet.

[Bearbeiten] Byte-Reihenfolge in der Umgangssprache

Auch die gewöhnliche Darstellung von (Dezimal-)Zahlen ist – im Sinne der Leserichtung der meisten europäischen Sprachen von links nach rechts – Big Endian. Dies kommt jedoch dadurch zustande, dass die Ziffernreihenfolge der arabischen Zahlen bei den Sprachen Mitteleuropas beibehalten wurde. Im Arabischen, das sich von rechts nach links liest, werden die Zahlen gleich geschrieben, das heißt, für Zahlen unter 100 werden sie als „Little Endian“ gelesen. (Für Zahlen ab 100 gilt im Prinzip dieselbe Sprachform wie im Deutschen.)

Ein Beispiel für Dezimalzahlen: In der gebräuchlichsten Darstellung (Big Endian) wird die Dezimal-Zahl vierhundertdreiundzwanzig als „423” dargestellt, da die "4" die Wertigkeit 100, die "2" die Wertigkeit 10 hat und die "3" die Wertigkeit 1 erhält. In der „Little-Endian”-Darstellung ist es umgekehrt, so dass die Darstellung der Zahl vierhundertdreiundzwanzig „324” wäre.

[Bearbeiten] Kontexte des Byte-Order-Problems

Das Problem der Byte-Reihenfolge betrifft hauptsächlich solche Datentypen, die aus mehreren Byte zusammengesetzt sind und vom jeweiligen Prozessor direkt unterstützt werden, also hauptsächlich Ganzzahl- und Gleitkommatypen, sowie Datentypen, die vom Prozessor effektiv als solche interne Datentypen behandelt werden, z. B. UTF-16. Um dieses Problem bei Unicode-Zeichen zu umgehen wird oft eine Byte-Reihenfolge-Markierung benutzt.

[Bearbeiten] Plattformübergreifende Darstellung von Zahlen

Um einen fehlerfreien Datenaustausch zwischen Computern verschiedener Plattformen zu ermöglichen, ist bei Netzwerkprotokollen immer die Byte-Reihenfolge festgeschrieben. Diese wird als Network Byte Order bezeichnet. Die natürliche Byte-Reihenfolge des Systems wird demgegenüber als Host Byte Order bezeichnet. Arbeitet das System nicht mit dieser Byte-Reihenfolge, so muss diese im Netzwerktreiber bzw. z. T. im Anwendungsprogramm entsprechend umgewandelt werden.

Im Falle der heute verbreitetsten Internetprotokoll-Suite entspricht Network Byte Order dem Big-Endian-Format. Es existieren jedoch noch immer Protokolle, die eine andere Byte-Reihenfolge verwenden!

In der auf den meisten Betriebssystemen angebotenen BSD-IP-Socket-API existieren zur Umwandlung der Byte-Reihenfolge vier Funktionen:

Name Datentyp Bedeutung
htonl() long (32 bit) host-to-network Umwandlung
htons() short (16 bit) host-to-network Umwandlung
ntohl() long (32 bit) network-to-host Umwandlung
ntohs() short (16 bit) network-to-host Umwandlung

Auf Big-Endian-Maschinen sind diese Funktionen wirkungslos, da Host- und Network-Byteorder identisch sind. Es empfiehlt sich jedoch dennoch stets der Gebrauch dieser Funktionen, da sich der Quellcode dadurch auch auf andere Systeme übertragen lässt. Es existieren in dieser API jedoch keine standardisierten Funktionen zur Umwandlung von 64-Bit-Zahlen, da diese bei der Entstehung des Standards noch nicht verbreitet waren.

Byte-Order-Probleme können auch beim Austausch von Dateien sowie zum Teil beim Austausch von Datenträgern zwischen verschiedenen Plattformen auftreten. Hier muss entweder durch eindeutige Definition des entsprechenden Dateiformats bzw. Dateisystems oder durch einen Kompatibilitätsmodus, der während des Ladens eine Erkennung und eventuelle Umwandlung durchführt, Abhilfe geschaffen werden.

Scherzhaft wird das Problem verschiedener Endians unterschiedlicher Architekturen auch oft NUXI-Problem bezeichnet: Wenn das Wort UNIX in zwei 2-Byte-Words (zwei 16-Bit-Register für "UN" und "IX") gespeichert wird, liegt es in einem Big-Endian-System als „UNIX“ im Speicher, in einem Little-Endian-System dagegen wegen der Vertauschung der Byte in jedem Wort als „NUXI“. (Auf 32-Bit Systemen würde dagegen "XINU" in einem einzelnen 32-Bit-Register stehen.)

[Bearbeiten] Vor- und Nachteile der Darstellungen

Grundsätzlich lassen sich nur wenige handfeste Argumente für oder gegen einzelne Byte-Reihenfolgen anbringen. Zusätzlich drängen immer breitere Datenworte und die Möglichkeit der gleichzeitigen Verarbeitung derselben die Bedeutung der Byte-Reihenfolge in den Hintergrund. Dennoch gibt es interessante Implikationen der Byte-Reihenfolgen.

Normalerweise sind Datenbus- und Registerbreite bei den meisten CPUs identisch. Bei den ersten Mikroprozessoren waren dies nur 4 Bit (später dann lange Zeit 8 Bit). Der Adressbus ist aber bei diesen CPUs wesentlich breiter. Damit ergab sich die Notwendigkeit, Daten mit einem Befehl zu laden oder zu speichern, welche auf mindestens zwei gekoppelte Register verteilt waren. Um die Komplexität der CPU zu vereinfachen (jede einzelne Transistorfunktion war noch teuer) war es einfacher, bei jeder Operation automatisch das niederwertige „Datenhäppchen“ zu laden, während dieser Speicheroperation konnte dann der Befehl weiter dekodiert und gegebenenfalls die weiteren Daten im nächsten Zyklus bearbeitet werden. Bei Großrechnern ("main frames") bestand dieses Problem weniger, da sie damals schon mit Datenbus-Breiten von 16 bis 48 Bit arbeiteten, diese also in einem einzigen Speicherzyklus laden konnten und somit die (Byte)-Reihenfolge keine Rolle spielte.

[Bearbeiten] Vorteile des Little-Endian-Formats

Um auf einer Little-Endian-Maschine eine Zwei-Byte-Zahl in eine Vier-Byte-Zahl zu verwandeln, müssen lediglich zwei mit Null gefüllte Byte am Ende angefügt werden, ohne dass sich die Speicheradresse ändert. Auf einer Big-Endian-Maschine muss der Wert zuvor im Speicher um zwei Byte verschoben werden. Auch die umgekehrte Umwandlung gestaltet sich einfacher. Auf einer Little-Endian-Maschine werden einfach die höherwertigen Byte verworfen, ohne dass sich die Speicheradresse ändert.

[Bearbeiten] Vorteile des Big-Endian-Formats

In der Big-Endian-Form kann unabhängig von der Anzahl der Ziffern der Zahl effizient geprüft werden, ob sie positiv oder negativ ist: Nur das erste (oberste) Byte ist zu lesen. Hier steht im höchsten Bit das Vorzeichen. Die restlichen Byte können übersprungen werden, egal, ob die Zahl mit 1, 2 oder 4 Byte Länge definiert ist.

Beim Verarbeiten von Bit-Strömen, d.h. Daten, die byteweise abgelegt sind, können 32 oder gar 64 Bit mit einem einzigen Speicherzugriff gelesen bzw. geschrieben werden, ohne Bytes zu vertauschen.

[Bearbeiten] Verwendung

[Bearbeiten] Little

Heutige PC-Systeme (x86-kompatible) verwenden Little-Endian. Weitere sind Alpha, manche SH3/SH4-Systeme oder Vax.

Daneben gibt es auch noch sogenannte true-little-endian Systeme. Diese Bezeichnung dient zur Unterscheidung von Architekturen, wie manche PowerPC-Varianten (u. a. 603, 740, 750), die als Little-Endian-Systeme konfiguriert werden können (s. u. Bi-Endian) und aus der Sicht des laufenden Programms dann Little-Endian verwenden, Werte im Speicher jedoch weiterhin im Big-Endian-Format ablegen. Bei Lade- und Speicheroperationen wird die Darstellung implizit umgewandelt. Diese Systeme sind keine true-little-endian Systeme. Bei der Softwareerstellung für diese Systeme muss dies ggfs. berücksichtigt werden, z. B. bei der Treiber-Programmierung.

[Bearbeiten] Big

Mainframe-Systeme (z. B. IBM Mainframe) sowie MIPS-, SPARC, PowerPC (z. B. bis vor kurzem im Mac)- und Motorola 68k-Prozessoren verwenden Big-Endian.
Die plattformunabhängige Programmiersprache Java verwendet Big-Endian.

[Bearbeiten] Mischvarianten (Bi-Endian)

Es existieren Prozessoren, z. B. bestimmte MIPS-Varianten und PowerPC unter Windows NT, die zwischen Little Endian und Big Endian umschaltbar sind. Auch ARM-Prozessoren (inkl. dem Intel XScale) können sowohl Little als auch Big Endian betrieben werden.

[Bearbeiten] Etymologie

Die kuriose Bezeichnung lehnt an den satirischen Roman Gullivers Reisen von Jonathan Swift an, in dem der Streit darüber, ob ein Ei am spitzen oder am dicken Ende aufzuschlagen sei, die Bewohner von Liliput in zwei verfeindete Lager spaltet – die „Little-Endians“ und die „Big-Endians“, in der deutschen Übersetzung des Buches „Spitz-Ender“ und „Dick-Ender“. Jonathan Swift spielt damit auf die Abspaltung der englischen Kirche (Spitz-Ender) von der katholischen Kirche (Dick-Ender) an.

[Bearbeiten] Weblinks

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu