English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scambio di byte NumPy

Modalità big-endian:Indica che il byte più alto dei dati è conservato all'indirizzo più basso della memoria, mentre il byte più basso è conservato all'indirizzo più alto. Questo modello di archiviazione è simile a trattare i dati come una stringa in ordine: l'indirizzo aumenta da piccolo a grande, e i dati vengono posizionati da alto a basso; questo è conforme alla nostra abitudine di lettura.

Modalità little-endian:Indica che il byte più alto dei dati è conservato all'indirizzo più alto della memoria, mentre il byte più basso è conservato all'indirizzo più basso. Questo modello di archiviazione combina efficacemente l'indirizzo e il valore di bit del dato, dove la parte alta dell'indirizzo ha un valore più alto e la parte bassa dell'indirizzo ha un valore più basso.

Ad esempio, in C, un variabile di tipo int con indirizzo 0x100, il valore dell'espressione di indirizzo &x è 0x100. E i quattro byte di x vengono memorizzati nei posizioni di memoria 0x100, 0x101, 0x102, 0x103.

numpy.ndarray.byteswap()

La funzione numpy.ndarray.byteswap() esegue la conversione di big-endian a little-endian per ogni elemento dell'ndarray.

 import numpy as np 
 a = np.array([1, 256, 8755], dtype=np.int16) 
 print('Il nostro array è:')
 print(a)
 print('Dati nella memoria rappresentati in esadecimale:')
 print(map(hex, a))
 # La funzione byteswap() scambia in loco i byte passando True 
 print('Chiamata alla funzione byteswap():')
 print(a.byteswap(True))
 print('Forma esadecimale:')
 print(map(hex, a))
 # Vediamo che i byte sono stati scambiati
 Il nostro array è:
 [ 1 256 8755]
 Dati nella memoria rappresentati in esadecimale:
 <map oggetto at 0x104acb400>
 Chiamata alla funzione byteswap():
 [ 256 1 13090]
 Forma esadecimale:
 <map oggetto at 0x104acb3c8>