Intercambio de bytes de NumPy

En casi todas las máquinas, los objetos de varios bytes se almacenan como una secuencia de bytes contigua. El orden de bytes es la regla de almacenamiento para objetos de programa que abarcan varios bytes.

  • Modo big-endian (extremo grande):Se refiere a que el byte alto de los datos se guarda en la dirección baja de la memoria, mientras que el byte bajo de los datos se guarda en la dirección alta de la memoria. Este modo de almacenamiento es algo similar a tratar los datos como una cadena en orden: las direcciones aumentan de menor a mayor, y los datos se colocan de mayor a menor; esto es consistente con nuestro hábito de lectura.

  • Modo little-endian (extremo pequeño):Se refiere a que el byte alto de los datos se guarda en la dirección alta de la memoria, mientras que el byte bajo de los datos se guarda en la dirección baja de la memoria. Este modo de almacenamiento combina eficazmente la altura de la dirección con el peso de los bits de datos: la parte de dirección alta tiene un peso alto, y la parte de dirección baja tiene un peso bajo.

Por ejemplo, en C, si una variable x de tipo int tiene la dirección 0x100, entonces el valor de su expresión de dirección &x es 0x100. Y los cuatro bytes de x se almacenarán en las posiciones 0x100, 0x101, 0x102, 0x103 de la memoria.

numpy.ndarray.byteswap()

La función numpy.ndarray.byteswap() convierte el orden de bytes de cada elemento en un ndarray, alternando entre big-endian y little-endian.

Ejemplo

import numpy as np a = np.array([1, 256, 8755], dtype = np.int16) print ('Nuestro array es:') print (a) print ('Datos en memoria en hexadecimal:') print (map(hex,a)) # La función byteswap() intercambia en el lugar pasando true print ('Llamando a la función byteswap():') print (a.byteswap(True)) print ('Forma hexadecimal:') print (map(hex,a)) # Podemos ver que los bytes ya se han intercambiado

El resultado es:

我们的数组是:
[   1  256 8755]
以十六进制表示内存中的数据:
<map object at 0x104acb400>
调用 byteswap() 函数:
[  256     1 13090]
十六进制形式:
<map object at 0x104acb3c8>
Otras extensiones