Python struct與小端存儲


參考鏈接: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
>>>

 

  unpackbytes變成相應的數據類型:

>>> 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位的處理器,由於寄存器的寬度大於一個內存地址,也面臨這一個如何將多個字節安排的問題。

 

 

 

  

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM