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位數據轉換成一個點分十進制串。