【Linux網絡編程】06 大小端(識別大小端)

1 大小端

大端
低位存高地址,高位存低地址

小端
低位存低地址,高位存搞地址

在這裏插入圖片描述

2 字節網絡傳輸過程

不同電腦存數據的大小端不一樣:
因此我們需要在網絡上傳輸規定都是一個大端或者小端
比如都規定大端:
在這裏插入圖片描述

3 識別大小端:

typedef union DD {//共同體是裏面各變量共同擁有一個地址空間
        unsigned short a;
        unsigned char b[2];
}DD;
int main(int argc, char* argv[]) {
        DD tmp;
        tmp.a = 0x0102;
        if (tmp.b[0] == 0x01) {  //對於數組來說 b[0]肯定是低地址,b[1]肯定是在高地址存儲
               cout << "大端" << endl;
        }
        else {
               cout << "小端" << endl;
        }
        return 0;
}

一般電腦是小端,服務器一般是大端,因爲網絡一般是大端,服務器就不用了進行網絡轉本地或者本地轉網絡。

4 (大小端)地址轉換函數

(注:當傳送的字節數大於等於2個字節的時候都要進行轉換)

htonl函數:將32位主機字節序數據轉換成網絡字節序(4個字節一般轉IP)
htons函數:本地轉網絡(2個字節一般轉端口號)
ntohl函數:網絡轉本地(4個字節一般轉IP)
ntohs函數:網絡轉本地(2個字節一般轉端口)

inet_pton函數:將一個點分十進制串轉換成一個32位大端的整數 (點分十進制數:192.168.1.1 ======》192 168 1 1)
inet_ntop函數:將一個網絡大端的32位數據轉換成一個點分十進制串。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章