1. 程式人生 > >點分法IP地址和網路二進位制表示的轉換

點分法IP地址和網路二進位制表示的轉換

字串形式的IP地址和網路傳輸中的IP地址如何進行轉換?

字串形式的IP地址主要是指點分法表示的IP地址,比如192.168.0.11,而實際在網路中表示IP地址時,需要轉換成整數形式,比如210.25.132.181轉換為整數形式是3524887733,其轉換有對應的API介面,雖然不同的操作平臺有所差別,但是還算是大同小異。

主要的轉換函式

  • int inet_aton(const char *cp, struct in_addr *inp); address to network
    inet_aton() 轉換網路主機地址cp(如192.168.1.10)為二進位制數值,並存儲在struct in_addr結構中,即第二個引數*inp,函式返回非0表示cp主機有地有效,返回0表示主機地址無效。
  • in_addr_t inet_addr(const char *cp);
    inet_addr函式轉換網路主機地址(如192.168.1.10)為網路位元組序二進位制值,如果引數char *cp無效,函式返回-1(INADDR_NONE),這個函式在處理地址為255.255.255.255時也返回-1,255.255.255.255是一個有效的地址,不過inet_addr無法處理;
  • in_addr_t inet_network(const char *cp);
    inet_network函式將字串形式轉換為整數形式,只不過不是轉換為網路位元組序,而是轉換為本地位元組序。
  • char *inet_ntoa(struct in_addr in); network to address
    inet_ntoa 函式轉換網路位元組排序的地址為標準的ASCII以點分開的地址,,該函式返回指向點分開的字串地址(如192.168.1.10)的指標,該字串的空間為靜態分配的,這意味著在第二次呼叫該函式時,上一次呼叫將會被重寫(覆蓋),所以如果需要儲存該串最後複製出來自己管理!
  • int inet_pton(int af, const char *src, void *dst);
    這個函式轉換字串到網路地址,第一個引數af是地址族,轉換後存在dst中
    inet_pton 是inet_addr的擴充套件,支援的多地址族有下列:
    AF_INET:src為指向字元型的地址,即ASCII的地址的首地址(ddd.ddd.ddd.ddd格式的),函式將該地址轉換為in_addr的結構體,並複製在*dst中
    AF_INET6:rc為指向IPV6的地址,,函式將該地址轉換為in6_addr的結構體,並複製在*dst中。
    如果函數出錯將返回一個負值,並將errno設定為EAFNOSUPPORT,如果引數af指定的地址族和src格式不對,函式將返回0。
  • const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
    這個函式轉換網路二進位制結構到ASCII型別的地址,引數的作用和上面相同,只是多了一個引數socklen_t cnt,他是所指向快取區dst的大小,避免溢位,如果快取區太小無法儲存地址的值,則返回一個空指標,並將errno置為ENOSPC。