IP地址轉換函式,inet_pton,inet_ntop

sgy618發表於2011-01-19
IP地址轉換函式,inet_pton,inet_ntop[@more@]Linux下這2個IP地址轉換函式,可以在將IP地址在“點分十進位制”和“整數”之間轉換
  而且,inet_pton和inet_ntop這2個函式能夠處理ipv4和ipv6。算是比較新的函式了。
  inet_pton函式原型如下[將“點分十進位制” -> “整數”]
  #include
  #include
  #include
  int inet_pton(int af, const char *src, void *dst);
  這個函式轉換字串到網路地址,第一個引數af是地址族,轉換後存在dst中
  inet_pton 是inet_addr的擴充套件,支援的多地址族有下列:
  af = AF_INET
  src為指向字元型的地址,即ASCII的地址的首地址(ddd.ddd.ddd.ddd格式的),函式將該地址
  轉換為in_addr的結構體,並複製在*dst中
  af =AF_INET6
  src為指向IPV6的地址,,函式將該地址
  轉換為in6_addr的結構體,並複製在*dst中
  如果函式出錯將返回一個負值,並將errno設定為EAFNOSUPPORT,如果引數af指定的地址族和src格式不對,函式將返回0。
  inet_ntop函式原型如下[將“點分十進位制” -> “整數”]
  #include
  #include
  #include
  const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
  這個函式轉換網路二進位制結構到ASCII型別的地址,引數的作用和上面相同,只是多了一個引數socklen_t cnt,他是所指向快取區dst的大小,避免溢位,如果快取區太小無法儲存地址的值,則返回一個空指標,並將errno置為ENOSPC
  下面是例程:
  #include
  #include
  #include
  #include
  #include
  #include
  int main (void)
  {
  char IPdotdec[20]; //存放點分十進位制IP地址
  struct in_addr s; // IPv4地址結構體
  // 輸入IP地址
  printf("Please input IP address: ");
  scanf("%s", &IPdotdec);
  // 轉換
  inet_pton(AF_INET, IPdotdec, (void *)&s);
  printf("inet_pton: 0x%xn", s.s_addr); // 注意得到的位元組序
  // 反轉換
  inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);
  printf("inet_ntop: %sn", IPdotdec);
  }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23168012/viewspace-1044876/,如需轉載,請註明出處,否則將追究法律責任。

相關文章