大端 小端與網路位元組序

2021-07-16 04:58:09 字數 1008 閱讀 1807

大端(big-endian),小端(little-endian)以及網路位元組序的概念在程式設計中經常會遇到,其中網路位元組序(network byte order)一般是指大端(big-endian,對大部分網路傳輸協議而言)傳輸,大端小端的概念是面向多位元組資料型別的儲存方式定義的,小端就是低位在前(低位位元組存在記憶體低位址,位元組高低順序和記憶體高低位址順序相同),大端就是高位在前,(其中「前」是指靠近記憶體低位址,儲存在硬碟上就是先寫那個位元組)。概念上位元組序也叫主機序。

1、首先大小端是面向多位元組型別定義的,比如2位元組、4位元組、8位元組整型、長整型、浮點型等,單位元組的字串一般不用考慮。

2、大端小端儲存、傳輸、以及接收處理需要對應。

3、大端(big-endian)就是高位元組(msb)在前,記憶體儲存體現上,資料的高位更加靠近低位址。

4、小端(little-endian)就是低位元組(lsb)在前,記憶體儲存體現上,資料的低位更加靠近低位址。

5、網路位元組序一般是指大端傳輸。

假設乙個32位 unsigned int型資料0x12 34 56 78,大小端8位儲存方式如下:

不同cpu有不同的位元組序型別,典型的使用小端儲存的cpu有:intel x86和arm

典型的使用大端儲存cpu有:power pc、mips unix和hp-pa unix 注:

以上cpu需根據具體型號查詢手冊,有的cpu甚至可能同時能支援兩種儲存方式。

上文說的網路位元組順序則是表示網路傳輸時的位元組序,按照tcp/ip協議是按照大端傳輸方式,也就是高位元組先走(先傳12,接著34,56,78),這跟本機儲存和伺服器儲存沒有關係,只要確保雙方解析對應即可。

c/c++中有如下四個常用的轉換函式,這四個函式在小端系統中生效,大端系統由於和網路位元組序相同,所以無需轉換。

以上函式包含標頭檔案:

#if defined(_linux) || defined(_darwin)

#include #endif

#ifdef win32

#include #endif

大端小端與網路位元組序

在裘宗燕翻譯的 程式設計實踐 裡,這對術語並沒有翻譯為 大端 和小端,而是 高尾端 和 低尾端 這就好理解了 如果把乙個數看成乙個字串,比如11223344看成 11223344 末尾是個 0 11 到 44 個占用乙個儲存單元,那麼它的尾端很顯然是44,前面的高還是低就表示尾端放在高位址還是低位址...

小端位元組序與大端位元組序

端模式分為 小端位元組序和大端位元組序,也就是位元組在記憶體中的順序。小端位元組序 低位元組存於記憶體低位址 高位元組存於記憶體高位址。如乙個long型資料0x12345678 0x0029f458 0x78 0x0029f459 0x56 0x0029f45a 0x34 0x0029f45b 0x...

小端位元組序與大端位元組序

端模式分為 小端位元組序和大端位元組序,也就是位元組在記憶體中的順序。0x0029f458 0x78 0x0029f459 0x56 0x0029f45a 0x34 0x0029f45b 0x12 在以上資料存放於記憶體中的表現形式中,0x0029f458 0x0029f459 0x0029f45a...