Endian est l'ordre des octets dans un fichier binaire.
Par exemple, supposons que certaines données soient stockées sur 2 octets.
00000001 00000000
À ce moment, quel octet affiche une valeur de 0 à 255 (c'est-à-dire du plus petit chiffre à 1, 2, 4, 8 ...)
L'autre représente une valeur entre 256 et 65535 (c'est-à-dire du plus petit à 256.512.1024 ...).
Pour les big endians, le premier octet représente un plus grand nombre. Dans l'exemple ci-dessus, le premier octet est de l'ordre de 256 à 32768 et le deuxième octet est de l'ordre de 1 à 128. C'est le même nombre que nous voyons habituellement.
Au contraire, dans le cas de Little Dian, la première bouchée est plus petite.
De plus, le dernier numéro de l'octet est toujours le plus petit (?) (← Je ne suis pas sûr, alors merci de commenter si vous comprenez)
Dans les temps modernes, de nombreux systèmes ont adopté des puces Intel, donc Win et Mac sont devenus des petits tondiens, mais les données du big endian circulent dans les rues.
Si vous touchez les données de Big Endian avec l'intention de Little Endian, le résultat sera étrange et cela fera mal, alors soyez prudent. Cette page résume comment basculer entre les enders (pour les langues que j'utilise le plus).
Fortran Dans Fortran, il existe une méthode pour déterminer à l'origine l'endian au moment de la compilation et une méthode de commutation lors de la lecture d'un fichier dans le programme.
C'est super facile.
Si vous utilisez gfortran
, compilez-le comme suit.
Cependant, sachez que tout dans le programme sera un big endian.
gfortran -fconvert=big-endian -o test test.f90
export F_UFMTENDIAN="little;big 87"
Si vous faites cela, le basique est Little Endian
, et seul le numéro d'appareil 87 est Big Endian
.
Bien sûr, vous pouvez retourner «grand» et «petit».
Vous pouvez omettre le reste de ;
.
Python Facile à décider lors de la lecture d'un fichier. Par exemple, supposons que vous souhaitiez lire des données pour créer une image. Tout d'abord, placez les données du fichier ouvert dans le tableau.
imagearr=np.fromfile(rfile,'<h',NROWS*NCOLS*1)
Un tableau qui contient les données d'origine que ʻimagearrcrée l'image. «np» est numpy.
rfileest le répertoire des fichiers.
NROWS * NCOLS * 1` indique le nombre de lignes x le nombre de colonnes.
Ici, «<h» indique le type de variable à lire comme endian. Le premier «<» indique le petit tondien. «h» indique int16.
D'autres exemples sont présentés ci-dessous.
caractères th> | ordre des octets th> | taille th> | Alignement th> |
---|---|---|---|
@ | natif td> | native | native |
= | natif td> | standard | none |
< | Petit Indien td> | standard | none |
> | Big Endian td> | standard | none |
! | Réseau (= Big Endian) td> | standard | none |
format th> | Tapez C th> | Type Python th> | taille standard th> | Remarques th> |
---|---|---|---|---|
x | pad byte | no value | ||
c | char | Chaîne de caractères de longueur 1 td> | 1 | |
b | signed char | type entier (entier) td> | 1 | (3) |
B | unsigned char | type entier td> | 1 | (3) |
? | _Bool | type booléen (booléen) td> | 1 | (1) |
h | short | type entier td> | 2 | (3) |
H | unsigned short | type entier td> | 2 | (3) |
i | int | type entier td> | 4 | (3) |
I | unsigned int | type entier td> | 4 | (3) |
l | long | type entier td> | 4 | (3) |
L | unsigned long | type entier td> | 4 | (3) |
q | long long | type entier td> | 8 | (2), (3) |
Q | unsigned long long | type entier td> | 8 | (2), (3) |
f | float | Type à virgule flottante td> | 4 | (4) |
d | double | Type à virgule flottante td> | 8 | (4) |
s | char[] | chaîne td> | ||
p | char[] | chaîne td> | ||
P | void * | type entier td> | (5), (3) |
Source: http://docs.python.jp/2/library/struct.html
Recommended Posts