[PYTHON] À propos d'Endian

Qu'est-ce qu'un endian

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.

Décidez au moment de la compilation

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

Changement pour chaque numéro de périphérique avec des variables d'environnement

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 ordre des octets taille Alignement
@ natif native native
= natif standard none
< Petit Indien standard none
> Big Endian standard none
! Réseau (= Big Endian) standard none
format Tapez C Type Python taille standard Remarques
x pad byte no value    
c char Chaîne de caractères de longueur 1 1  
b signed char type entier (entier) 1 (3)
B unsigned char type entier 1 (3)
? _Bool type booléen (booléen) 1 (1)
h short type entier 2 (3)
H unsigned short type entier 2 (3)
i int type entier 4 (3)
I unsigned int type entier 4 (3)
l long type entier 4 (3)
L unsigned long type entier 4 (3)
q long long type entier 8 (2), (3)
Q unsigned long long type entier 8 (2), (3)
f float Type à virgule flottante 4 (4)
d double Type à virgule flottante 8 (4)
s char[] chaîne    
p char[] chaîne    
P void * type entier   (5), (3)

Source: http://docs.python.jp/2/library/struct.html

Recommended Posts

À propos d'Endian
À propos de LangID
À propos de CAGR
À propos de virtiofs
À propos de python-apt
À propos de l'autorisation
À propos de sklearn.preprocessing.Imputer
À propos de Gunicorn
À propos de requirements.txt
À propos des paramètres régionaux
À propos de l'axe = 0, axe = 1
À propos de l'importation
À propos de numpy
À propos de pip
À propos de Linux
À propos de numpy.newaxis
À propos de Linux
À propos de l'importation
À propos de Linux
À propos de Linux
À propos de cv2.imread
À propos de _ et __
À propos de wxPython
Bloc-notes sur TecoGAN
À propos des tranches Python
Brièvement sur __name__
À propos de la notation d'inclusion de python
À propos du volume Docker
À propos du type de référence
À propos du scraping Twitter
En savoir plus sur la programmation
À propos de la personnalisation de Flask
À propos de Python tqdm.
À propos du rendement Python
Remarques sur avec
À propos de python, classe
A propos des modèles linéaires
À propos des fonctions Go
À propos de décrire les pandas
À propos de Kivy root
À propos du délai d'expiration de Firestore
À propos de l'héritage Python
À propos de python, range ()
À propos de Confusion Matrix
[Linux] À propos de PATH
À propos de Python Decorator
Linux (à propos des groupes)
Remarque sur awk
À propos de la référence Python
À propos du démarrage automatique de Bitnami
À propos des décorateurs Python
À propos du SDK Milkcocoa
Notes sur Pytorch
[Python] À propos du multi-processus
À propos de la diffusion Numpy
À propos des liens symboliques