Achtung: Dies ist eine historische Web-Site. Aktuell ist https://rainer.gerhards.net/ (engl) bzw https://www.rainer-gerhards.de/ (deutsch). Alle dynamischen Funktionen, Formulare etc auf dieser Seite sind abgeschaltet.
Datenschutzerklärung Impressum

 
Aug 01, 2017 - 06:46 PM


Select language
Preferred language:


Online
There are 1 unlogged user and 0 registered users online.

You can log-in or register for a user account here.

Anmeldung




 


 Log in Problems?
 New User? Sign Up!



Post new topic   Reply to topic
View previous topic Printable version Log in to check your private messages View next topic
Author Message
rgerhardsOffline
Post subject: Big und Little Endian Darstellung...  PostPosted: Jan 17, 2011 - 07:49 AM



Joined: Sep 25, 2006
Posts: 688

Status: Offline
... und die Notwendigkeit, diese zu konverieren. Hinweis zur Erklärung im Buch '"Verteile Systeme" von Tanenbaum und Steen, Abb. 4.8 (in der leider etwas misslungenen deutschen Übersetzung).

Eigentlich geht es um etwas verhältnismässig Einfaches, nämlich darum, in welcher Reihenfolge Datenelemente angeordnet werden. Ein Byte reicht offensichtlich nicht aus, um Integers größer 255 oder Zeichenketten zu speichern. Daher muss man mehrere Bytes verwenden, um dies zu tun. Wenn man aber mehrere Verwendet, muss man wissen, in welcher Reihenfolge die zu betrachten sind. Mit ein bisschen Nachdenken, wird klar, dass dies ein ganz übliches Problem auch im "realen Leben" ist: auch ein Text ist eine Zusammenstellung von einzelnen Zeichen, da man nicht alles mit einem einzigen Zeichen sagen kann. Daher müssen wir wissen, in welcher Reihenfolge wir die Zeichen lesen müssen. Ist die falsch, kommt nur Quatsch heraus. Dieser Text hier muss beispielsweise von links nach rechts, und von oben nach unten gelesen werden. Wäre es ein arabaischer Text, so müsste man ihn zwar auch von oben nach unten lesen, allerdings von rechts nach links. Entsprechend würde ein chinesischer Text Spaltenweise von oben nach unten, gelesen, wobei die Spalte am Ende vom links nach rechts gewechselt wird. Dabei sind alle Ansätze gleich gut, es gibt keinen (wirklichen) fachlichen Grund dafür, den einen oder den anderen zu wählen.

In unserer westlichen Schrift verbinden wir sogar - meist unbemerkt - zwei Ansätze: so stellen wir Schrift von links nach rechts da, Zahlen aber von rechts nach links. Die Übernahme von den Arabern [die sie von den Indern übernommen habe] macht sich hier bemerkbar! Wir stellen daher die Zahl einhunderdreiundzwanzig als 123 dar. Bei konsequenter Anwendung westlicher Schreibweise müsste sie eigentlich als 321 geschrieben werden. Also gibt es auch in unserer alltäglichen Schrift unterschiedliche Darstellungen für Zahlen und Worte!

Im Computer ist es nicht anders. Dort gibt es prinzipiell zwei Möglichkeiten, zusammenhängende Daten anzuordnen:

a) in aufsteigender Reihenfolge der Speicheradressen
b) in absteigender Reihenfolge

anders als im realen Leben war es das auch schon. Beide Darstellungsarten sind gleich gut, man muss sich aber auf die Leseweise einigen.

In Bezug auf Zeichenketten ist man sich einig: jede Architektur stellt sie in aufsteigender Reihenfolge dar.

Im Folgenden ein paar Diagramme: die erste Zeile ist das darzustellende Datum, die zweite die (einstelligen) Speicheradresse, beginnend bei 0 (zur Vereinfachung).

Dargestellt wird nun das Wort "JILL":

JILL
0123

hier sind sich alle einig.

Bei Zahlen ist das leider nicht der Fall. Intel stellt hohe Werte auf hohen Speicheradressen dar. Betrachten wir wie im Buch 4-Byte Wort und die Zahl 5. Dann ergibt sich folgende Darstellung:

5000
0123

Die 5 steht an Adresse 0, da dies die niedrigste Speicheradresse ist, und niedrige Werte (Ziffern) stehen an niedrigen Speicheradressen. [Wer mag: grob kann man sich das mit der von mir oben beschriebenen "Verwestlichung" der Darstellung der arabischen Zahlen vorstellen].

Ein besseres Beispiel wäre meiner Meinung nach die Zahl
16.777.221 = 224+1 = hex 0x01-00-00-05

Die wird bei Intel wie folgt dargestellt:
5001
0123

Die "1" steht auf höchster Speicherstelle, da sie den höchsten Wert (als hex-Wert) besitzt.

Jetzt kommt das Problem: Sparc macht es "genau andersrum" [in der Analogie: so, wie wir unsere Zahlen auch auf Papier schreiben]: hohe Werte stehen an kleinen Speicherstellen. Der Wert 0x01-00-00-05 wird also dargestellt als:
1005
0123, entsprechend 5 als
0005
0123

Will man nun Zahlen zwischen Intel und Sparc austauschen, dann muss man die "Bytes drehen", um dieser unterschiedlichen Darstellung gerecht zu werden (ähnlich, wie man bei einer ÜBersetzung Deutsch-Arabisch nicht nur die Sprache übersetzen muss, sondern auch noch die Schriftrichtung ändern).

Würde man den Wert 0005 "einach so" aus Sparc kopiere, dann wäre der Wert falsch. Denn dann hätten wir

0005
0123 auf Intel, bei Sparc ist die Wertigkeit jetzt aber gerade andersherum, daher lautet der Wert
5*224, was ganz offensichtlich von 5 sehr verschieden ist.

Nun kann man diese "Drehung" aber nicht immer vornehmen. Denn Zeichenketten werden ja immer gleich dargestellt. Die Zeichenkette "JILL" muss also beibehalten werden. Würde die "Drehung" (Konvertierung) immer vorgenommen, so würde auf der Sparc "LLIJ" ankommen - offensichtlich auch nicht das gewünschte.

Die Moral von der Geschicht': man muss wissen, ob es sich um Ganzzahlen oder Zeichenketten handelt, wenn man zwischen heterognene Systemen Daten austauscht. Je nach Art des Datentyps sind bestimmte Konvertierungen vorzunehmen, oder auch nicht ("drehen").

In der Praxis wird die Reihenfolge der Byteübertragung in den Protokollen spezifiziert, und eine entsprechende Konvertierung jeweils den Gegebenheiten entsprechend vorgeschrieben. Dabei werden teil auch sehr viel unterschiedlichere Datentypen beachtet und exakt spezifiziert.
 
 View user's profile Send private message  
Reply with quote Back to top
Display posts from previous:     
Jump to:  
All times are GMT + 1 Hour
Post new topic   Reply to topic
View previous topic Printable version Log in to check your private messages View next topic
Powered by PNphpBB2 © 2003-2007 The PNphpBB Group
Credits
:: RSS Feed: ::
Page created in 0.135379076004 seconds.

Ferientips - das Urlaubsweb - Jan Gerhards - Ulrike Gerhards - Ulrike Gerhards Foto Site