昨天和同事討論了一下這個函數,在網絡上搜了一下,答案都是函數的基本概念,為什么是大端模式(big-endian),而沒有解釋為什么使用大端模式(big-endian)。首先說明一下概念
uint16_t htons(uint16_t hostshort);
htons的功能:將一個無符號短整型數值轉換為網絡字節序,即大端模式(big-endian)
參數u_short hostshort: 16位無符號整數
返回值:TCP / IP網絡字節順序
htons 是把你機器上的整數轉換成“網絡字節序”, 網絡字節序是 big-endian,也就是整數的高位字節存放在內存的低地址處。 而我們常用的 x86 CPU (intel, AMD) 電腦是 little-endian,也就是整數的低位字節放在內存的低字節處。舉個例子吧。假定你的port是0x1234,在網絡字節序里 這個port放到內存中就應該顯示成addr addr+1,也就是:0x12 0x34;而在x86電腦上,0x1234放到內存中實際是:addr addr+1,也就是:0x34 0x12。htons 的用處就是把實際內存中的整數存放方式調整成“網絡字節序”的方式。
第一個問題:為什么使用兩個字節,也就是16位來存儲。
這個簡單一些,因為一個字節只能存儲8位2進制數,而計算機的端口數量是65536個,也就是2^16,兩個字節。
第二個為題:為什么計算機需要大端模式和小端模式?
小端模式 :強制轉換數據不需要調整字節內容,1、2、4字節的存儲方式一樣。
大端模式 :符號位的判定固定為第一個字節,容易判斷正負。
