主機字節序和網絡字節序
阿新 • • 發佈:2018-10-19
保存 什麽 cells 方式 之間 運算 一個 高位到低位 數據表
不同的CPU有不同的字節序類型,這些字節序是指 整數 在內存中保存的順序,這個叫做 主機序。最常見的有兩種:
1.Little endian:將低序字節存儲在起始地址
2.Big endian:將高序字節存儲在起始地址
LE little-endian(小端)
- 最符合人的思維的字節序;
- 地址低位存儲值的低位;
- 地址高位存儲值的高位;
- 怎麽講是最符合人的思維的字節序,是因為從人的第一觀感來說;
- 低位值小,就應該放在內存地址小的地方,也即內存地址低位;
- 反之,高位值就應該放在內存地址大的地方,也即內存地址高位;
BE big-endian(大端)
1) 最直觀的字節序;
2) 地址低位存儲值的高位;
3) 地址高位存儲值的低位;
4) 為什麽說直觀,不要考慮對應關系;
5) 只需要把內存地址從左到右按照由低到高的順序寫出;
6) 把值按照通常的高位到低位的順序寫出;
7) 兩者對照,一個字節一個字節的填充進去;
例子:在內存中雙字 0x01020304(DWORD) 的存儲方式
Addr: 4000 4001 4002 4003 |
x86系列CPU都是little-endian的字節序。網絡字節順序采用big endian排序方式。
網絡字節順序是TCP/IP中規定好的一種數據表示格式,它與具體的CPU類型、操作系統等無關,從而可以保證數據在不同主機之間傳輸時能夠被正確解釋。
我們知道計算機正常的內存增長方式是從低到高(當然棧不是),取數據方式是從基址根據偏移找到他們的位置,從他們的存儲方式可以看出,大端存儲因為第一個字節就是高位,從而很容易知道它是正數還是負數,對於一些數值判斷會很迅速。而小端存儲 第一個字節是它的低位,符號位在最後一個字節,這樣在做數值四則運算時從低位每次取出相應字節運算,最後直到高位,並且最終把符號位刷新,這樣的運算方式會更高效。
主機字節序和網絡字節序