Linux網路程式設計 位元組序 位址轉換函式

2021-10-10 13:59:37 字數 3097 閱讀 2422

1 .談到位元組序,那麼會有朋友問什麼是位元組序

很簡單:【例如乙個16位的整數,由2個位元組組成,8位為一位元組,有的系統會將高位元組放在記憶體低的位址上,有的則將低位元組放在記憶體高的位址上,所以存在位元組序的問題。】

2 .那麼什麼是高位元組、低位元組?

也相當簡單:【乙個16進製制整數有兩個位元組組成,例如:0xa9。

高位元組就是指16進製制數的前8位(權重高的8位),如上例中的a。

低位元組就是指16進製制數的後8位(權重低的8位),如上例中的9。】

大於乙個位元組的變數型別一般有兩種表示方法:

位元組序是指多位元組資料的儲存順序,在設計計算機系統的時候,有兩種處理記憶體中資料的方法:大端格式、小端格式。

例如:變數0xabcd在大端位元組序和小端位元組型系統中表示方法如圖

我們用**驗證一下我們自己的系統是小端還是大端吧

可以檢視:      x86都是小端位元組序    網路位元組序都是大端位元組序

#include /* 聯合型別的變數型別,用於測試位元組序

* 成員value的高低端位元組可以由成員type按位元組訪問

*/typedef unionto;

int main(int argc, char *ar**)

/* 大端位元組序檢查 */

if(typeorder.byte[0] == 0xab && typeorder.byte[1]==0xcd)

return 0;

}

3 .位元組序轉換函式介紹

位元組序轉換函式的使用:

#include /* 聯合型別的變數型別,用於測試位元組序

* 成員value的高低端位元組可以由成員type按位元組訪問

*//* 16位 */

typedef unionto16;

/* 32位 */

typedef unionto32;

#define bits16 16 /*16位*/

#define bits32 32 /*32位*/

/* 按照位元組列印,begin為位元組開始,

* flag為bits16表示16位,

* flag為bits32表示32位,

*/void showvalue(unsigned char *begin, int flag)

else if(flag == bits32)

for(i = 0; i< num; i++)

printf("\n");

}int main(int argc, char *ar**)

以下介面所需標頭檔案:#include

功能:

將點分十進位制數串轉換成 32 位無符號整數

引數:

family:協議族( af_inet、af_inet6、pf_packet 等 ),常用 af_inet

strptr:點分十進位制數串

返回值:

成功返回 1 、 失敗返回其它

測試示例:

#include #include int main()

執行結果如下:

功能:

將 32 位無符號整數轉換成點分十進位制數串

引數:

family:協議族( af_inet、af_inet6、pf_packet 等 ),常用 af_inet

addrptr:32 位無符號整數

strptr:點分十進位制數串

len:strptr 快取區長度

len 的巨集定義
#define inet_addrstrlen   16  // for ipv4
#define inet6_addrstrlen  46  // for ipv6

返回值:

失敗:返回 null

測試示例:

#include #include int main()

; char ip_str[16] = "null";

inet_ntop(af_inet,(unsigned int *)ip,ip_str,16);

printf("ip_str = %s\n",ip_str);

return 0;

}

執行結果如下:

感謝博文 

linux網路程式設計 網路位元組序 位址轉換

endian 這個詞出自 格列佛遊記 小人國的內戰就源於吃雞蛋時是究竟從大頭 big endian 敲開還是從小頭 little endian 敲開,由此曾發生過六次叛亂,其中乙個皇帝送了命,另乙個丟了王位。我們一般將 endian 翻譯成 位元組序 將 big endian 和 little en...

網路程式設計 網路位元組序和位址位元組序轉化

網路位元組序是大端序,而記憶體位元組序是小端序 就像彙編學的內容一致 大端序 高位位元組存放到地位位址 小端序 高位位元組存放在高位位址 因此在位址傳輸時需要將位址進行轉化 short unsigned short htons unsigned short h to n,主機轉化成網路資料 s sh...

Linux網路程式設計 位元組序

1 談到位元組序,那麼會有朋友問什麼是位元組序 非常easy 比如乙個16位的整數。由2個位元組組成,8位為一位元組,有的系統會將高位元組放在記憶體低的位址上,有的則將低位元組放在記憶體高的位址上,所以存在位元組序的問題。2 那麼什麼是高位元組 低位元組?也相當簡單 乙個16進製制整數有兩個位元組組...