大端和小端

2021-10-04 03:41:00 字數 1287 閱讀 5794

目錄

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的機器採用這種規則,只是...

小端和大端

或許你曾經仔細了解過什麼是大端小端,也動手編寫了測試手頭上的機器上是大端還是小端的程式,甚至還編寫了大端小端轉換程式 但過了一段時間之後,當你再看到大端和小端這兩個字眼,你的腦中很快浮起了自己曾經做過的工作,卻總是想不起究竟哪種是大端 哪種是小端,然後又去查以前寫的記錄?更讓人不快的是,這種經歷反反...