0

UNIX の C プログラムでは、gethostbyname() を使用して、「localhost」のようなドメインのアドレスを取得できます。gethostbyname() の結果をドット付き 10 進数表記に変換するにはどうすればよいですか。

struct hostent* pHostInfo;
long nHostAddress;

/* get IP address from name */
pHostInfo=gethostbyname("localhost");

if(!pHostInfo){
    printf("Could not resolve host name\n");
    return 0;
}

/* copy address into long */
memset(&nHostAddress, 0, sizeof(nHostAddress));
memcpy(&nHostAddress,pHostInfo->h_addr,pHostInfo->h_length);

nHostAddress には次のものが含まれます。

16777243

出力を次のように取得できるように結果を変換するにはどうすればよいですか。

127.0.0.1
4

4 に答える 4

1

struct in_addr次を使用して、直接から文字列に変換できますinet_ntoa()

char *address = inet_ntoa(pHostInfo->h_addr);

あなたが持っている値(16777243)は間違っているように見えますが、それは1.0.0.27になります!

于 2012-05-01T19:42:47.600 に答える
1

inet_ntoa()APIはあなたが探していることを実行しますが、明らかに非推奨です:

https://beej.us/guide/bgnet/html/multi/inet_ntoaman.html

より将来性のあるIPV6ishが必要な場合は、次のようになりますinet_ntop()

https://beej.us/guide/bgnet/html/multi/inet_ntopman.html

于 2012-05-01T19:45:46.143 に答える