昨天和同事討論了一下這個函式,在網路上搜了一下,答案都是函式的基本概念,為什麼是大端模式(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位元組的儲存方式一樣。
大端模式 :符號位的判定固定為第乙個位元組,
容易判斷正負
。參考:
C語言 htons函式
uint16 t htons uint16 t hostshort htons的功能 將乙個無符號短整型數值轉換為網路位元組序,即大端模式 big endian 引數u short hostshort 16位無符號整數 返回值 tcp ip網路位元組順序 htons 是把機器上的整數轉換成 網路位元...
在核心中C語言實現htons 函式
網路位元組順序是tcp ip中規定好的一種資料表示格式,它與具體的cpu型別 作業系統等無關,從而可以保證資料在不同主機之間傳輸時能夠被正確解釋,網路位元組順序採用big endian排序 大尾順序 方式。因為專案中需要,設定例如來自埠號為9877的資料要做些什麼處理,在上層設定了9877這個數字,...
c語言函式詳解
c程式是由函式組成的,我們寫的 都是由主函式main 開始執行的。函式是c程式的基本模組,是用於完成特定任務的程式 單元從函式定義角度看,函式可分為系統函式和使用者定義函式。系統函式,即庫函式 這是由編譯系統提供的,使用者不必自己定義這些函式,可以直接使用他們,如我們常用的列印函式printf 使用...