詳解C語言的htons函式

2022-04-15 10:57:00 字數 809 閱讀 6452

昨天和同事討論了一下這個函式,在網路上搜了一下,答案都是函式的基本概念,為什麼是大端模式(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 使用...