Linux下網路IP地址的轉換函式

來源:互聯網
上載者:User

網路IP地址本是用32位二進位來表示的,為了記憶的方便可以用點分十進位來表示IP地址,同時,網路IP地址在網路傳輸和電腦內部的儲存方式也不同,需要用函數來進行轉換。

 

1.將點分十進位字串轉換成十進位長整型數:in_addr_t inet_addr(const char *cp);       in_addr_t 即long型,參數cp表示一個點分十進位字串,傳回值是十進位長整型數。

 

 

2.將長整型IP地址轉換成點分十進位:char *inet_ntoa(struct in_addr in);   參數in是一個in_addr類型的結構體,這個結構體在man 7 ip中查得到:struct in_addr{uint32_t s_addr};ine_ntoa返回的是點分十進位的IP地址字串。

 

 

3.主機字元順序和網路字元順序的轉換:電腦中的字元和網路中的字元的儲存順序是不同的,電腦中的整型數和網路中的整型數進行交換時,需要相關的函數進行轉換。如果將電腦中的長整型IP地址轉換成網路字元順序的整型IP地址,使用htonl函數。這些函數如下:

uint32_t htonl(uint32_t hostlong);將電腦中的32位長整型數轉換成網路字元順序的32位長整型數。(用於IP的轉換)

uint16_t htons(uint16_t hostshort);將電腦中的16位整型數轉換成網路字元順序的16位整型數。。(用於port的轉換)

uint32_t ntohl(uint32_t netlong);將網路中的32位常整型數轉換成電腦中的32位長整型數。。(用於IP的轉換)

uint16_t ntons(uint16_t netshort);將網路中的16位整型數轉換成電腦中的16位整型數。。(用於port的轉換)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.