NumPy バイトスワップ

ほとんどすべてのマシンでは、マルチバイトオブジェクトは連続したバイト列として格納されます。バイトオーダーは、複数バイトにまたがるプログラムオブジェクトの格納規則です。

  • ビッグエンディアン方式:データの高位バイトをメモリの低アドレスに格納し、データの低位バイトをメモリの高アドレスに格納します。このような格納方式は、データを文字列として順番に扱うのに少し似ています。アドレスは小さい方から大きい方へ増加し、データは高位から低位へ配置されます。これは私たちの読み書きの習慣と一致しています。

  • リトルエンディアン方式:データの高位バイトをメモリの高アドレスに格納し、データの低位バイトをメモリの低アドレスに格納します。この格納方式は、アドレスの高低とデータのビット重みを効果的に組み合わせたもので、高アドレス部分は重みが高く、低アドレス部分は重みが低くなります。

例えばC言語では、int型の変数xのアドレスが0x100である場合、対応するアドレス式&xの値は0x100になります。また、xの4バイトはメモリの0x100, 0x101, 0x102, 0x103の位置に格納されます。

numpy.ndarray.byteswap()

numpy.ndarray.byteswap() 関数は、ndarray 内の各要素のバイトをビッグエンディアンとリトルエンディアン間で変換します。

例

import numpy as np a = np.array([1, 256, 8755], dtype = np.int16) print ('私たちの配列は:') print (a) print ('メモリ内のデータを16進数で表示:') print (map(hex,a)) # byteswap() 関数は true を渡すことでインプレースで交換します print ('byteswap() 関数を呼び出します:') print (a.byteswap(True)) print ('16進数形式:') print (map(hex,a)) # バイトが交換されたことがわかります

出力結果は次のとおりです:

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