Linux関数--inet_pton/inet_ntop


inet_ptonとinet_ntop


Linuxの下の2つのIPアドレス変換関数は、IPアドレスを「ポイント10進数」と「整数」の間で変換することができ、inet_ptonとinet_ntopの2つの関数はipv 4とipv 6を処理することができる.比較的新しい関数です.

inet_pton


関数のプロトタイプは次のとおりです[[ポイントを10進数に分割]->[整数]
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
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.dddフォーマット)であり、関数は、そのアドレスをin_に変換するaddrの構造体を*dstにコピーしてaf=AF_INET 6 srcはIPV 6を指すアドレスであり、関数はこのアドレスをin 6_に変換するaddrの構造体を*dstにコピーします.関数エラーが負の値を返し、errnoがEAFNOSUPPORTに設定されている場合、パラメータafで指定されたアドレスファミリーとsrcフォーマットが間違っている場合、関数は0を返します.

inet_ntop


関数のプロトタイプは次のとおりです[[ポイントを10進数に分割]->[整数]
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
// ASCII , , socklen_t cnt,
// dst , , , , errno ENOSPC

 

プログラミングの例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
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%x
", s.s_addr); // // inet_ntop(AF_INET, (void *)&s, IPdotdec, 16); printf("inet_ntop: %s
", IPdotdec); }