目錄
1.高位元組和低位元組
2.高位址和低位址
3.大端和小端
4.網路位元組序和主機位元組序
計算機中以位元組為單位,每個位址對應乙個位元組,乙個位元組8bit。在計算機系統中,如果大於乙個位元組,就需要區分位元組順序。常見的位元組順序分為:大端(big endian)和小端(litter endian)。想要理解什麼是大端和小端,首先需要明確下面幾個概念。
什麼是高位元組?什麼是低位元組?
在乙個n進製的位中,最左邊的位叫最高有效位,最右邊的叫最低有效位。
舉個例子,1個int的整數123456789
二進位制表示:0000 0111 0101 1011 1100 1101 0001 0101
十六進製制表示: 07 5b cd 15
按照從右向左的方向,二進位制中,0101是低位元組,最左邊的0000是高位元組;十六進製制中,15是低位元組,07是高位元組
在記憶體中,多位元組物件都是被儲存為連續的位元組序列。假設將int整型在記憶體中的起始位址(首個位元組儲存位置)為0x1000,那麼另外三個位元組就儲存在0x1001~0x1003。不管儲存的位元組順序是怎樣的,記憶體位址的分配都是從小到大的增長。其中0x1000稱為低位址端,0x1003稱為高位址端。
還是以上面的int 123456789為例,十六進製制表示: 07 5b cd 15
記憶體位址(低——>高)
位元組儲存順序
大端(big endian)
0x1000 0x1001 0x1002 0x1003
0x07 0x5b 0xcd 0x15
高位元組存放在低位址
低位元組存放在高位址
小端(litter endian)
0x1000 0x1001 0x1002 0x1003
0x15 0xcd 0x5b 0x07
低位元組存放在低位址
高位元組存放在高位址
大小端一般是由cpu架構決定的。
網路位元組序(network order):tcp/ip各層協議將位元組序定義為big endian,因此tcp/ip協議中使用的位元組序通常稱之為網路位元組序。
主機位元組序(host order):整數在記憶體中儲存的順序,它遵循little endian規則(不一定,要看主機的cpu架構)。所以當兩台主機之間要通過tcp/ip協議進行通訊的時候就需要呼叫相應的函式進行主機序列(little endian)和網路序(big endian)的轉換。
參考連線:
大端和小端
1 小端與大端 對於乙個由2個位元組組成的16位整數,在記憶體中儲存這兩個位元組有兩種方法 一種是將低序位元組儲存在起始位址,這稱為小端 little endian 位元組序 另一種方法是將高序位元組儲存在起始位址,這稱為大端 big endian 位元組序。2 下面是兩個具體例子 記憶體位址 小端...
大端和小端
小端 little endian 儲存 在儲存器中按照最低有效位元組到最高有效位元組的順序儲存物件。大多數intel相容機採用這種規則。大端 big endian 規則 在儲存器中按照最高有效位元組到最低有效位元組的順序儲存物件。大多數ibm和sun microsystems的機器採用這種規則,只是...
小端和大端
或許你曾經仔細了解過什麼是大端小端,也動手編寫了測試手頭上的機器上是大端還是小端的程式,甚至還編寫了大端小端轉換程式 但過了一段時間之後,當你再看到大端和小端這兩個字眼,你的腦中很快浮起了自己曾經做過的工作,卻總是想不起究竟哪種是大端 哪種是小端,然後又去查以前寫的記錄?更讓人不快的是,這種經歷反反...