inet_aton()とinet_ntoa()

何となくネットワークプログラミング的なことを。ドット付10進表記 <-> バイナリの変換を行う関数。かなり適当に作っちゃいました。

#include 
#include 
#include 
#include 
#include 
#include 


/* IPアドレスをネットワークバイトオーダに変換する関数 */
/* 関数内で inet_aton() をcallする */
/* 引数はIPアドレスと構造体 in_addr へのポインタ */
int resolv(char *str, struct in_addr *inp);

int main(void)
{
  struct in_addr addr1;
  struct in_addr addr2;

  /* ascii to network */
  resolv("192.168.0.1", &addr1);
  resolv("192.168.0.16", &addr2);

  /* network to ascii */
  printf("\n%x = %s\n", addr1.s_addr, inet_ntoa(addr1));
  printf("%x = %s\n", addr2.s_addr, inet_ntoa(addr2));

  return(0);
}


int resolv(char *str, struct in_addr *inp)
{
  inet_aton(str, inp);          /* Ascii To Network */
  printf("%s = %x\n", str, inp->s_addr);

  return (0);
}


実行結果
[root@lk022 src]# ./sock
192.168.0.1 = 100a8c0     /*192.168.0.1は C0A80001 だから、*
192.168.0.16 = 1000a8c0    *逆に格納されている模様。       */

100a8c0 = 192.168.0.1
1000a8c0 = 192.168.0.16