【理解字節序】

計算機硬件有兩種儲存數據的方式:大端字節序(big endian)和小端字節序(little endian)。

舉例來說,數值0x2211使用兩個字節儲存:高位字節是0x22,低位字節是0x11。

大端字節序:高位字節在前,低位字節在後,這是人類讀寫數值的方法。
小端字節序:低位字節在前,高位字節在後,即以0x1122形式儲存。

在這裏插入圖片描述
首先,爲什麼會有小端字節序?

答案是,計算機電路先處理低位字節,效率比較高,因爲計算都是從低位開始的。所以,計算機的內部處理都是小端字節序。

但是,人類還是習慣讀寫大端字節序。所以,除了計算機的內部處理,其他的場合幾乎都是大端字節序,比如網絡傳輸和文件儲存。

計算機處理字節序的時候,不知道什麼是高位字節,什麼是低位字節。它只知道按順序讀取字節,先讀第一個字節,再讀第二個字節。

如果是大端字節序,先讀到的就是高位字節,後讀到的就是低位字節。小端字節序正好相反。

理解這一點,才能理解計算機如何處理字節序。

字節序的處理,就是一句話:

"只有讀取的時候,才必須區分字節序,其他情況都不用考慮。"

處理器讀取外部數據的時候,必須知道數據的字節序,將其轉成正確的值。然後,就正常使用這個值,完全不用再考慮字節序。

即使是向外部設備寫入數據,也不用考慮字節序,正常寫入一個值即可。外部設備會自己處理字節序的問題。

https://blog.erratasec.com/2016/11/how-to-teach-endian.html#.XqhKjZMzZQI

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章