1 .談到位元組序,那麼會有朋友問什麼是位元組序
很簡單:【例如乙個16位的整數,由2個位元組組成,8位為一位元組,有的系統會將高位元組放在記憶體低的位址上,有的則將低位元組放在記憶體高的位址上,所以存在位元組序的問題。】
2 .那麼什麼是高位元組、低位元組?
也相當簡單:【乙個16進製制整數有兩個位元組組成,例如:0xa9。
高位元組就是指16進製制數的前8位(權重高的8位),如上例中的a。
低位元組就是指16進製制數的後8位(權重低的8位),如上例中的9。】
大於乙個位元組的變數型別一般有兩種表示方法:
位元組序是指多位元組資料的儲存順序,在設計計算機系統的時候,有兩種處理記憶體中資料的方法:大端格式、小端格式。
例如:變數0xabcd在大端位元組序和小端位元組型系統中表示方法如圖
我們用**驗證一下我們自己的系統是小端還是大端吧
可以檢視: x86都是小端位元組序 網路位元組序都是大端位元組序
3 .位元組序轉換函式介紹#include /* 聯合型別的變數型別,用於測試位元組序
* 成員value的高低端位元組可以由成員type按位元組訪問
*/typedef unionto;
int main(int argc, char *ar**)
/* 大端位元組序檢查 */
if(typeorder.byte[0] == 0xab && typeorder.byte[1]==0xcd)
return 0;
}
位元組序轉換函式的使用:
以下介面所需標頭檔案:#include#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**)
功能:
將點分十進位制數串轉換成 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_inetaddrptr: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進製制整數有兩個位元組組...