第一篇技術貼 htons 與 ntohs 的區別

來源:互聯網
上載者:User

雖然註冊CSDN已經有好幾年了,學習寫程式也有兩年的時間了。對於絕大數人來說,我還是得菜鳥。平時遇到什麼問題也會來到這個平台搜尋別人的解答。也從這個平台上獲益很多。

今天在公司因為一個問題和同事就關於htons與ntohs有沒有區別探討了一下,因為我平時也沒留意過,憑著我自己的理解,認為是沒有區別的。比如,同在X86的機器下,這兩個函數都不是把小端的記憶體表示方法轉成大端的嗎。在回來的路上,我想回來查查,同時也想到何不就這個問題寫下來,方便自己以後查看,也協助那些想要解決同樣問題的同志呢,於是就開始了我第一篇技術貼。希望我自己也會一直這麼繼續下去。好了閑話少說,開始正題吧。

 

我用vc試了一下,結果是相同的。

 

 

 

我就想去看看linux的原始碼(/include/netinet/in.h)

 

# if __BYTE_ORDER == __BIG_ENDIAN
/* The host byte order is the same as network byte order,
   so these functions are all just identity.  */
# define ntohl(x) (x)
# define ntohs(x) (x)
# define htonl(x) (x)
# define htons(x) (x)
# else
#  if __BYTE_ORDER == __LITTLE_ENDIAN
#   define ntohl(x) __bswap_32 (x)
#   define ntohs(x) __bswap_16 (x)
#   define htonl(x) __bswap_32 (x)
#   define htons(x) __bswap_16 (x)
#  endif
# endif

代碼是一樣的。

ps: 開始我以為htons是函數,在源碼包找了兩個小時都沒有找到,在絕望的時候看了下標頭檔,我汗顏了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.