計算機硬體有兩種儲存資料的方式
1.
計算機硬體有兩種儲存資料的方式:大端位元組序(big endian)和小端位元組序(little endian)。
舉例來說,數值0x2211
使用兩個位元組儲存:高位位元組是0x22
,低位位元組是0x11
。
- 大端位元組序:高位位元組在前,低位位元組在後,這是人類讀寫數值的方法。
- 小端位元組序:低位位元組在前,高位位元組在後,即以
0x1122
形式儲存。
同理,0x1234567
的大端位元組序和小端位元組序的寫法如下圖。
2.
我一直不理解,為什麼要有位元組序,每次讀寫都要區分,多麻煩!統一使用大端位元組序,不是更方便嗎?
上週,我讀到了一篇文章,解答了所有的疑問。而且,我發現原來的理解是錯的,位元組序其實很簡單。
3.
首先,為什麼會有小端位元組序?
答案是,計算機電路先處理低位位元組,效率比較高,因為計算都是從低位開始的。所以,計算機的內部處理都是小端位元組序。
但是,人類還是習慣讀寫大端位元組序。所以,除了計算機的內部處理,其他的場合幾乎都是大端位元組序,比如網路傳輸和檔案儲存。
4.
計算機處理位元組序的時候,不知道什麼是高位位元組,什麼是低位位元組。它只知道按順序讀取位元組,先讀第一個位元組,再讀第二個位元組。
如果是大端位元組序,先讀到的就是高位位元組,後讀到的就是低位位元組。小端位元組序正好相反。
理解這一點,才能理解計算機如何處理位元組序。
5.
位元組序的處理,就是一句話:
"只有讀取的時候,才必須區分位元組序,其他情況都不用考慮。"
處理器讀取外部資料的時候,必須知道資料的位元組序,將其轉成正確的值。然後,就正常使用這個值,完全不用再考慮位元組序。
即使是向外部裝置寫入資料,也不用考慮位元組序,正常寫入一個值即可。外部裝置會自己處理位元組序的問題。
6.
舉例來說,處理器讀入一個16位整數。如果是大端位元組序,就按下面的方式轉成值。
x = buf[offset] * 256 + buf[offset+1];
上面程式碼中,buf
是整個資料塊在記憶體中的起始地址,offset
是當前正在讀取的位置。第一個位元組乘以256,再加上第二個位元組,就是大端位元組序的值,這個式子可以用邏輯運算子改寫。
x = buf[offset]<<8 | buf[offset+1];
上面程式碼中,第一個位元組左移8位(即後面添8個0
),然後再與第二個位元組進行或運算。
如果是小端位元組序,用下面的公式轉成值。
x = buf[offset+1] * 256 + buf[offset];
32位整數的求值公式也是一樣的。
/* 大端位元組序 */ i = (data[3]<<0) | (data[2]<<8) | (data[1]<<16) | (data[0]<<24); /* 小端位元組序 */ i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);
(完)
相關文章
- 計算機的硬體系統儲存器計算機
- Python常用的資料儲存方式有哪些?五種!Python
- Python資料儲存方式有幾種?如何使用?Python
- iOS開發資料儲存篇—iOS中的幾種資料儲存方式iOS
- Android回顧--(十二) 資料儲存的幾種方式Android
- 計算機微機硬體計算機
- C/C++ 判斷計算機儲存器位元組序(端序)的幾種方式C++計算機
- 計算機的硬體與軟體計算機
- Docker容器中資料兩種持久化儲存方式:卷和掛載宿主目錄Docker持久化
- 計算機補碼儲存計算機
- 計算機硬體系統計算機
- java物件頭的兩種儲存Java物件
- Machine Learning (3) - 介紹兩種儲存和讀取模型的方式Mac模型
- Android的3種資料儲存技術(一)File儲存Android
- 計算機儲存器的容量計算和地址轉換計算機
- JavaScript本地儲存的方式有哪些JavaScript
- 計算機儲存器的分類及其特性計算機
- 邊緣計算|Hadoop——邊緣計算,有沒有對應的軟體?例如資料中心或雲端計算環境進行資料處理和儲存的Hadoop單一軟體框架?Hadoop框架
- Web3證明資料的儲存方式Web
- 【Azure Key Vault】在Azure Databricks上獲取Azure Key Vault中所儲存的機密(secret)的兩種方式
- 【知識分享】計算機“儲存容量”、“速率”計算機
- 從資料恢復角度分析iscsi、cifs、NFS三種儲存方式的區別資料恢復NFS
- 可計算儲存技術全面升級CSD 3000儲存體驗
- 記憶體中的資料儲存記憶體
- 瀏覽器儲存資料的幾種方法瀏覽器
- 程式語言及計算機硬體基礎計算機
- 兩招提升硬碟儲存資料的寫入效率硬碟
- 單細胞資料 儲存方式彙總
- Spark(16) -- 資料讀取與儲存的主要方式Spark
- Springboot呼叫Oracle儲存過程的幾種方式Spring BootOracle儲存過程
- 軟體定義儲存助力數字中國建設:智慧高效又經濟的資料儲存方式
- 密碼、手機等隱私資訊的儲存方式密碼
- MySql資料儲存格式Compact及計算MySql的B+Tree高度MySql
- Spark Streaming讀取Kafka資料兩種方式SparkKafka
- 計算機儲存器容量和定址能力的關係計算機
- 推動資料儲存方式變革的因素(附原資料表)
- 樹狀資料結構儲存方式—— CUD 篇資料結構
- 容器化RDS—— 計算儲存分離 or 本地儲存