詳解C語言的htons函數


昨天和同事討論了一下這個函數,在網絡上搜了一下,答案都是函數的基本概念,為什么是大端模式(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字節的存儲方式一樣。
  大端模式 :符號位的判定固定為第一個字節,容易判斷正負

 

 

參考:http://blog.csdn.net/ce123/article/details/6971544


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM