在socket程式設計的時候會遇到端序的問題。位元組序和程式語言無關,和硬體的儲存方式有關。 intel的cpu使用小端序,而網路上傳輸資料使用大端序。在我的理解中,大端序和小端序並沒有哪種更好,只是儲存的方式不同而已。
記憶體中我們只關心1byte,位址的基本單位也是byte。位元組序不關心1個byte中8個bit是如何儲存,位元組序與多個byte是怎麼儲存的有關。 舉個例子,char是1個位元組,所以並不會存在位元組序的問題。而short 是2個位元組,大端序和小端序是不一樣的。 小端序中儲存位址從低到高,對應乙個變數的低位元組到高位元組。大端序則相反。
例如 short x = 0x0102; 那麼小端序中按照位址從低到高是02 01,大端序中按照位址從低到高為01 02.
另乙個相似但是和位元組序毫無關係的概念是位域(bit field),位域和編譯器有關,這裡先挖個坑,有時間另外補上。
還有乙個概念上相似的是python中的編碼。先挖個坑。
大端序和小端序
一 概述 位元組序,又稱端序,尾序,英文 endianness。在電腦科學領域中,位元組序是指存放多位元組資料的位元組 byte 的順序,典型的情況是整數在記憶體中的存放方式和網路傳輸的傳輸順序。endianness有時候也可以用指位序 bit 大小端序跟硬體的體系結構有關,所有x86系列的pc機都...
大端序和小端序
一 概述 位元組序,又稱端序,尾序,英文 endianness。在電腦科學領域中,位元組序是指存放多位元組資料的位元組 byte 的順序,典型的情況是整數在記憶體中的存放方式和網路傳輸的傳輸順序。endianness有時候也可以用指位序 bit 大小端序跟硬體的體系結構有關,所有x86系列的pc機都...
大端序小端序
摘自 linux核心程式設計 比如看這個 十六進製制數0x12345678的表示 32位大端序表示 1234 56780 8 1624 32位小端表示 7856 341208 1624 備註 0x12345678中 12 是高位,78是低位。x86體系結構是用小端序。程式設計檢視自己電腦是大端還是小...