[Frage] Byteordering

Ragou

Well-Known Member
20 Jun 2015
671
278
#1
Ich bin heute in meinem Buch auf die Begriffe "Little-Endian-System" und "Big-Endian-System" gestoßen. Es wurde auch versucht so einfach wie möglich zu erklären, doch ich hab nichts verstanden. Daraufhin habe ich gegoogelt, doch ich hab nichts verstanden. Daraufhin hab ich versucht nach simplen Lösungen zu gucken, doch ich hab nichts verstanden. Daraufhin hab ich Sephirot Sephirot angetickert, ob es es mir genauer erklären könne, aber auch er konnte es nur eher oberflächlich beschreiben.

Lauter hochwissenschaftlicher Texte im Netz, aber keiner der mal erklärt, wofür der Bums überhaupt da ist.

Aber vielleicht kann es ja hier jemand anhand von simplen Beispielen oder einfachen Erklärungen fest machen.

Was ich verstanden habe ist, dass bei dem Little-Endian-System das der signifikanteste Wert als letztes gespeichert wird und beim Big-Endian-System der signifikanteste Wert an erster Stelle gespeichert wird und das ein x86-System wohl ein LES System ist.


Daher meine Frage: Wann braucht man sowas? Kann ich das beim programmieren beeinflussen oder ist es abhängig von der Prozessorarchitektur? Was hat das ganze überhaupt mit der Prozessorarchitektur zutun? Wieso wurden zwei Systeme entwickelt bzw. wo sind vor und nachteile?
Also kurzgefasst: Ich weiß wie die Systeme vorgehen, aber sonst nichts darüber.

Kann mir da jemand aushelfen und es vielleicht näher erklären? Ich weiß nicht wie relevant sowas beim alltäglichen Coding ist oder nur in sehr sehr speziellen Fällen gebraucht wird oder ggf. gar nicht benötigt wird, weil es nur theoretisches Wissen ist und man da sowieso keinen Einfluss drauf hat und das ganze einfach nur die Funktionen eines Computers beschreibt.
 
Likes: Sephirot
7 Nov 2010
272
133
#2
Little und Big Endian sind Begriffe die Erstis in der Technischen Informatik reingepruegelt bekommen.

Kann ich das beim programmieren beeinflussen oder ist es abhängig von der Prozessorarchitektur?
Wenn du einen offenen Speicherbereich hast den du selber verwaltest, dann kannst du da sowohl little endian, als auch big endian drin speichern. Grundsaetzlich haengt es auf Hardwareebene wie du schon beschrieben hast von der Prozessorarchitektur ab.

Es wurde sich vereinfacht gesagt irgendwann mal ausgedacht, dass wir uns im heutigen Hauptspeicher in Byteschritten bewegen, das bedeutet, dass ein Byte die kleinste Einheit ist, die wir ueber eine Adresse ansprechen. Und genau das ist auch der springende Punkt.

Was heisst das nun?
Stell dir vor du hast den Hex Wert 0x1234. Nun Stellen Zwei Ziffern jeweils ein Byte dar, also 0x12 & 0x34. Um z.B. die 1 zu ueberschreiben musst du auch die 2 mit verarbeiten, weil das ganze Byte der kleinste Speicherbereich ist, den du addressieren kannst.

Nun haben wir unseren Speicher der z.B. 2 Bytes gross ist. Je nachdem in welche Richtung wir unseren Speicher nun fuellen ergibt sich entweder little oder big endian.
 

Ragou

Well-Known Member
20 Jun 2015
671
278
#3
Also ist es im Prinzip einfach egal und überhaupt nicht relevant? Man muss sich nur auf die Architektur der Prozessoren abstimmen?
 

Ragou

Well-Known Member
20 Jun 2015
671
278
#5
Korrekt, ausserdem bauen sowohl x86 als auch ARM auf little endian auf.
Das hatte ich schon nachgelesen. Aber die Speicherung übernehmen moderne Programmiersprachen doch mittlerweile von selbst oder nicht? Also könnte es höchstens bei low level programming interessant werden?
 
7 Jan 2015
4,887
4,214
#6
Das hatte ich schon nachgelesen. Aber die Speicherung übernehmen moderne Programmiersprachen doch mittlerweile von selbst oder nicht? Also könnte es höchstens bei low level programming interessant werden?
Jo jedoch kann dir das essentielle Verständnis teils sehr gut helfen Sachen besser zu verstehen und somit auch effizienter zu arbeiten.
 
Likes: Ragou

modul

Active Member
6 Aug 2019
114
169
#7
Es stimmt, dass es für dich bei High-Level Programming nicht von relevanz ist. Wenn du aber doch mal low level codest, wird es relevant.

Du musst es auch nicht "auf die Prozessor abstimmen" da das alles für dich vom OS übernommen wird. Eine Anpassung an die Hardware ist für dich als normaler Programmierer nie nötig.

Ein weiterer netter Punkt, den man vielleicht im Gedächtnis behalten sollte, ist, dass Network-Bytes immer in Big Endian übertragen werden. Das heißt in IPv4, ARP, etc. überall immer in Big Endian gearbeitet wird.
Das hat man eingeführt, um egal welche zwei Knoten miteinander interagieren, immer sicher weiß wie die Bytes übertragen werden - auch wenn es verschiedene Prozessortypen mit verschiedenen Architekturen von verschiedenen Herstellern sind.

Ganz "egal" und "irrelevant" ist es dann eben doch nicht :smile:
 
Last edited:
Likes: Ragou

Loeh

Active Member
15 Jul 2016
266
92
#8
Ich musste fürs Studium mal den Hashalgorithmus MD4 programmieren. Da haben mir LE und BE das Genick gebrochen, da man Operationen auf Bit-Ebene machen muss...

Es ist definitiv wichtig zu wissen was LE und BE sind!
 
Likes: Ragou