參考鏈接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017685387246080
在使用Python 實現字符向字節數據類型轉換的時候,Python沒有提供專門處理字節的數據類型,不過Python提供了一個Struct模塊提供bytes和其他二進制數據類型的轉換
pack(),將任意數據類型轉變為bytes數據類型
>>> import struct >>> struct.pack('>I', 10240099) b'\x00\x9c@c'
pack
的第一個參數是處理指令,'>I'
的意思是:
>
表示字節順序是big-endian,也就是網絡序,I
表示4字節無符號整數。
后面的參數個數要和處理指令一致。如果不一致會報錯
>>> struct.pack('I','2') Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: required argument is not an integer >>>
unpack
把bytes
變成相應的數據類型:
>>> struct.unpack('>IH', b'\xf0\xf0\xf0\xf0\x80\x80') (4042322160, 32896)
H代表兩個字節的無符號整數,
c代表一個字節的字符
所以,盡管Python不適合編寫底層操作字節流的代碼,但在對性能要求不高的地方,利用struct
就方便多了。
struct
模塊定義的數據類型可以參考Python官方文檔:https://docs.python.org/3/library/struct.html#format-characters
小端存儲
參考鏈接:https://blog.csdn.net/favory/article/details/4441361
與數據在存儲器中的存放地址有關
小端存儲:較低的有效字節存放在較低的存儲器地址,較高的有效字節存放在較高的存儲器地址
大端存儲:較高的有效字節存放在較低的存儲器地址,較低的有效字節存放在較高的存儲器地址
為什么會有較高的有效字節,和較低的有效字節的區分呢?
這是因為目前的計算機系統中,我們是以字節為單位的,每個地址單元都對應着一個字節,一個字節為8bit,而C語言中除了有8bit的char外,還有16bit的short類型,還用32bit的long類型(不同的編譯器還不一樣),那么加入我們存放一個長度32bit的整數:
(由於一個地址單元是8bit,需要將這個長度為32bit的數據存放在4個地址單元中)
另外,對於16位或者32位的這些寄存器長度大於8位的處理器,由於寄存器的寬度大於一個內存地址,也面臨這一個如何將多個字節安排的問題。