Endian ist die Bytereihenfolge in einer Binärdatei.
Angenommen, einige Daten werden in 2 Bytes gespeichert.
00000001 00000000
Zu diesem Zeitpunkt gibt dieses Byte einen Wert von 0 bis 255 an (dh von der kleinsten Ziffer bis zur 1,2,4,8 ... Ziffer).
Der andere Wert repräsentiert einen Wert zwischen 256 und 65535 (dh vom kleinsten bis zum 256.512.1024 ...).
Für Big Endians steht das erste Byte für eine größere Zahl. Im obigen Beispiel liegt das erste Byte in der Größenordnung von 256 bis 32768 und das zweite Byte in der Größenordnung von 1 bis 128. Dies ist die gleiche Zahl, die wir normalerweise sehen.
Im Gegenteil, im Fall von Little Dian ist der erste Biss kleiner.
Außerdem ist die letzte Zahl im Byte immer noch die kleinste (?) (← Ich bin mir nicht sicher, bitte kommentieren Sie, wenn Sie verstehen)
In der heutigen Zeit haben viele Systeme Intel-Chips verwendet, so dass sowohl Win als auch Mac wenig tondianisch geworden sind, aber große Endian-Daten auf den Straßen herumlaufen.
Wenn Sie die Daten von Big Endian mit der Absicht von Little Endian berühren, ist das Ergebnis seltsam und es wird weh tun. Seien Sie also vorsichtig. Diese Seite fasst zusammen, wie man zwischen Endern wechselt (in Bezug auf die Sprachen, die ich am häufigsten benutze).
Fortran In Fortran gibt es eine Methode zum ursprünglichen Bestimmen des Endians zur Kompilierungszeit und eine Methode zum Umschalten beim Lesen einer Datei im Programm.
Das ist super einfach.
Wenn Sie gfortran
verwenden, kompilieren Sie es wie folgt.
Beachten Sie jedoch, dass alles im Programm ein Big Endian sein wird.
gfortran -fconvert=big-endian -o test test.f90
export F_UFMTENDIAN="little;big 87"
Wenn Sie dies tun, ist das "Basic" Little Endian "und nur die" Gerätenummer 87 ist Big Endian ".
Natürlich können Sie "groß" und "klein" umdrehen.
Sie können den Rest von ;
weglassen.
Python Einfach zu entscheiden beim Lesen einer Datei. Angenommen, Sie möchten Daten lesen, um ein Bild zu erstellen. Fügen Sie zunächst die Daten der geöffneten Datei in das Array ein.
imagearr=np.fromfile(rfile,'<h',NROWS*NCOLS*1)
Ein Array, das die Originaldaten enthält, mit denen "imagearr" das Bild erstellt.
np
ist numpy.
rfile
ist das Verzeichnis der Dateien.
NROWS * NCOLS * 1
gibt die Anzahl der Zeilen x die Anzahl der Spalten an.
Hier gibt <h
den Typ der Variablen an, die als Endian gelesen werden soll.
Das erste <
zeigt den kleinen Tondian an.
h
zeigt int16 an.
Andere Beispiele sind unten gezeigt.
Zeichen th> | Bytereihenfolge th> | Größe th> | Ausrichtung th> |
---|---|---|---|
@ | native td> | native | native |
= | native td> | standard | none |
< | Kleiner Inder td> | standard | none |
> | Big Endian td> | standard | none |
! | Netzwerk (= Big Endian) td> | standard | none |
Format th> | Geben Sie C th> ein | Python-Typ th> | Standardgröße th> | Bemerkungen th> |
---|---|---|---|---|
x | pad byte | no value | ||
c | char | Zeichenkette der Länge 1 td> | 1 | |
b | signed char | Integer-Typ (Integer) td> | 1 | (3) |
B | unsigned char | Integer-Typ td> | 1 | (3) |
? | _Bool | Boolescher Typ (Bool) td> | 1 | (1) |
h | short | Integer-Typ td> | 2 | (3) |
H | unsigned short | Integer-Typ td> | 2 | (3) |
i | int | Integer-Typ td> | 4 | (3) |
I | unsigned int | Integer-Typ td> | 4 | (3) |
l | long | Integer-Typ td> | 4 | (3) |
L | unsigned long | Integer-Typ td> | 4 | (3) |
q | long long | Integer-Typ td> | 8 | (2), (3) |
Q | unsigned long long | Integer-Typ td> | 8 | (2), (3) |
f | float | Gleitkommatyp td> | 4 | (4) |
d | double | Gleitkommatyp td> | 8 | (4) |
s | char[] | Zeichenfolge td> | ||
p | char[] | Zeichenfolge td> | ||
P | void * | Integer-Typ td> | (5), (3) |
Quelle: http://docs.python.jp/2/library/struct.html
Recommended Posts