top
Loading...
NumPy 字節交換

NumPy 字節交換

在幾乎所有的機器上,多字節對象都被存儲為連續的字節序列。字節順序,是跨越多字節的程序對象的存儲規則。

  • 大端模式:指數據的高字節保存在內存的低地址中,而數據的低字節保存在內存的高地址中,這樣的存儲模式有點兒類似於把數據當作字符串順序處理:地址由小向大增加,而數據從高位往低位放;這和我們的閱讀習慣一致。

  • 小端模式:指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中,這種存儲模式將地址的高低和數據位權有傚地結合起來,高地址部分權值高,低地址部分權值低。

例如在 C 語言中,一個類型為 int 的變量 x 地址為 0x100,那么其對應地址表達式&x的值為 0x100。且x的四個字節將被存儲在存儲器的 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 ('以十六進製表示內存中的數據:') print (map(hex,a)) # byteswap() 函數通過傳入 true 來原地交換 print ('調用 byteswap() 函數:') print (a.byteswap(True)) print ('十六進製形式:') print (map(hex,a)) # 我們可以看到字節已經交換了

輸出結果為:

我們的數組是:
[   1  256 8755]
以十六進製表示內存中的數據:
<map object at 0x104acb400>
調用 byteswap() 函數:
[  256     1 13090]
十六進製形式:
<map object at 0x104acb3c8>
北斗有巢氏 有巢氏北斗