Byte-Reihenfolge

Guten Abend,

zuerst einmal möchte ich mich für meine Frage im voraus schon einmal entschuldigen -.-

Nun zu der Frage selbst...
Folgender Sachverhalten:

Eine ASCII-codierte Textdatei wird Bitweise ausgelesen (Fehlerkorrekturverfahren wird nicht beachtet) und direkt interpretiert.
Hier die Binärdatei "01000101011010010110111001100101001000000101001001100101011010010110100001100101011011100110011001101111011011000110011101100101"

In ASCII
"Eine Reihenfolge"

Nun woher weis ich, welche Byte-Reihenfolge dies ist ob Big oder Little Endian und wie bekomm ich sowas raus?

Meine Antwort wäre Big Endian weil wenn ich die ersten 8 Bits in Dez setze, bekomme ich den Wert 69 raus, der für das "E" steht. Nun für den Vergleich von Big Endian hier wird die wertigste Zahl ja als erstes geschrieben somit ist 60 die 100 und 9 die 10.

Zudem noch die Frage, wie würde es aus sehen, wenn ich die Byte-Reihenfolge drehen würde.


Vielen Dank im voraus.

MfG
 
Nun woher weis ich, welche Byte-Reihenfolge dies ist ob Big oder Little Endian und wie bekomm ich sowas raus?
Hm, ist das eine Frage aus einer Aufgabe?
Endianess ist erst bei Datentypen "interessant", die mehr als 1 Byte benötigen - und dafür gibt es eben Konventionen wie BOM, "network-order", diverse RFCs usw - unter anderem auch ASCII-Text "as is" abzulegen, da man sonst (bei little-endian) auch noch zwischen 16, 32 usw. Wortbreite unterscheiden müsste ;).

Nun für den Vergleich von Big Endian hier wird die wertigste Zahl ja als erstes geschrieben somit ist 60 die 100 und 9 die 10.
Nicht Byte und Bitreihenfolgen verwechseln. Ein Byte wird bei jeder Endianess gleich aussehen.

Zudem noch die Frage, wie würde es aus sehen, wenn ich die Byte-Reihenfolge drehen würde.
PHP:
# -*- coding: utf-8 -*-
# python 2.7

inp = ("0100010101101001011011100110010100100000010100100"
      "11001010110100101101000011001010110111001100110011"
      "01111011011000110011101100101")

def to_chunks(data,size):
    return [data[i:i+size] for i in xrange(0,len(data),size)]

def byte_swap(byte_array, word_size):
    swapped = map(reversed, to_chunks(byte_array, word_size/8))  # result is a list of sublists
    return [item for sublist in swapped for item in sublist]    # return a flat list
    
def print_bytes(byte_array, word_size):
    print "LE,","%d bit:" % word_size,\
          "".join(map(chr,byte_swap(byte_array,word_size)))

def main():
    byte_input = [int(chunk,2) for chunk in to_chunks(inp, 8)]
    print "Raw:", byte_input
    map(print_bytes, [byte_input] * 5, [8, 16, 32, 64, 128])
    
main()
Code:
CDW@highlander-jr:~/projects/emb_py % python byteorder.py
Raw: [69, 105, 110, 101, 32, 82, 101, 105, 104, 101, 110, 102, 111, 108, 103, 101]
LE, 8 bit: Eine Reihenfolge
LE, 16 bit: iEenR ieehfnloeg
LE, 32 bit: eniEieR fneheglo
LE, 64 bit: ieR eniEeglofneh
LE, 128 bit: eglofnehieR eniE
 
Zurück
Oben