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

Troca de Bytes do NumPy

Modo big-endian:O byte mais alto dos dados é armazenado no endereço mais baixo da memória, enquanto o byte mais baixo dos dados é armazenado no endereço mais alto da memória. Este padrão de armazenamento é um pouco semelhante a tratar os dados como uma string em ordem: o endereço aumenta de baixo para cima, enquanto os dados são colocados de alto para baixo; isso coincide com nosso hábito de leitura.

Modo little-endian:O byte mais alto dos dados é armazenado no endereço mais alto da memória, enquanto o byte mais baixo dos dados é armazenado no endereço mais baixo da memória. Este padrão de armazenamento combina eficazmente o nível do endereço com o valor da posição de bits, onde a parte do endereço mais alta tem um valor mais alto e a parte do endereço mais baixa tem um valor mais baixo.

Por exemplo, em linguagem C, uma variável do tipo int x com endereço 0x100, então a expressão de endereço &x é 0x100. E os quatro bytes de x serão armazenados no endereço 0x100, 0x101, 0x102, 0x103Posição.

numpy.ndarray.byteswap()

A função numpy.ndarray.byteswap() converte os bytes de cada elemento do ndarray para big-endian e little-endian.

 import numpy as np 
 a = np.array([1, 256, 8755], dtype = np.int16) 
 print('Nosso array é: ')
 print(a)
 print('Representação hexadecimal dos dados na memória: ')
 print(map(hex, a))
 # A função byteswap() troca localmente os bytes ao passar True 
 print('Chamada da função byteswap():')
 print(a.byteswap(True))
 print('Forma hexadecimal: ')
 print(map(hex, a))
 # Podemos ver que os bytes foram trocados
 Nosso array é:
 [ 1 256 8755]
 Representação hexadecimal dos dados na memória:
 <map object at 0x104acb400>
 Chamada da função byteswap():
 [ 256 1 13090]
 Forma hexadecimal:
 <map object at 0x104acb3c8>