1.概述
大端模式與小端模式指的是超過乙個位元組大小的資料在計算機記憶體中兩種不同的存放方式。如果將資料的高位,儲存在低位址,則為大端模式(big-endian);如果將資料的高位,儲存在高位址,則為小端模式(little-endian)。兩種存放方式並無明顯的優劣之分,但又同時存在於不同的計算機系統中,我們把某個特定系統所有的位元組序成為主機位元組序。
網路位元組序:接收到的第乙個位元組被當做高位看待,而傳送的第乙個位元組為低位址資料。所以,網路位元組序相當於是大端模式。
2,.判斷大小端模式
在明白了大小端模式的概念以後,可以想到很多的方法去判斷本機採用何種模式儲存資料。其中,借助聯合體(union)來進行判斷的方法最為具有代表性。
**如下:
#include int main(int argc, char *argv)
un;un.n = 1;
printf(1 == un.sz[sizeof(int) - 1] ? "big-endian" : "little-endian");
printf("\n");
return 0;
}
3.網路位元組序的轉換
網路程式設計中,考慮到不同主機間的相容問題,我們需要關注如何在主機位元組序和網路位元組序之間相互轉換。這兩種位元組序之間的轉換使用以下4個函式:
uint16_t htons(uint16_t host16bitvalue);
uint32_t htonl(uint32_t host32bitvalue);
uint16_t ntohs(uint16_t net16bitvalue);
uint32_t ntohl(uint32_t net32bitvalue);
觀察這些函式的名字,可發現一些規律。其中,h代表host,n代表network,s代表short,l代表long。使用這些函式時,我們不必關心主機位元組序的真實值。可以想象,如果主機位元組序是大端模式,這些函式實際上不會做出轉換。
最後:由於這幾個函式所做的轉換只是基於位元組順序,比較簡單明瞭,所以此處不再作出**演示。
********************====end*************************====
大端模式與小端模式 網路位元組序與主機位元組序
大端模式與小端模式 三 大端小端轉換方法 big endian轉換成little endian如下 define bigtolittle16 a uint16 a 0xff00 8 uint16 a 0x00ff 8 define bigtolittle32 a uint32 a 0xff00000...
大端模式小端模式以及網路位元組序
大端模式小端模式以及網路位元組序 主機位元組序有兩種 大端模式和小端模式 不同的cpu有不同的主機位元組序型別。典型的使用小端儲存的cpu有 intel x86和arm 典型的使用大端儲存cpu有 power pc mips unix和hp paunix。網路位元組序類似於大端模式,注意是類似,為什...
大端 小端與網路位元組序
大端 big endian 小端 little endian 以及網路位元組序的概念在程式設計中經常會遇到,其中網路位元組序 network byte order 一般是指大端 big endian,對大部分網路傳輸協議而言 傳輸,大端小端的概念是面向多位元組資料型別的儲存方式定義的,小端就是低位在...