この質問と回答に従って、IP アドレス (数字とドット表記) をそれぞれの符号なし整数に変換しました。つまり、 inet_aton 関数を利用します
関数をテストするために、c で非常に簡単なプログラムを作成しました。コードは次のとおりです。
int main(int argc, char** argv) {
char* ip1 = "125.113.200.068";
char* ip2 = "125.113.200.068";
struct in_addr ip1s;
inet_aton(ip1, &ip1s);
struct in_addr ip2s;
inet_aton(ip2, &ip2s);
if (ip1s.s_addr == ip2s.s_addr) {
printf("equal: %u = %u", ip1s.s_addr, ip2s.s_addr);
}else{
printf("not equal: %u != %u", ip1s.s_addr, ip2s.s_addr);
}
return (EXIT_SUCCESS);
}
2 つの文字列に同じ IP が指定されているにもかかわらず、次のような出力が得られます。
等しくない: 15774463 != 0
さらに、ips が 125.113.200.68 に設定されるように 0 を削除すると、関数は 2 つの等しい符号なし整数を返します。先行する 0 は IP を無効にしますか? しかし、そうであれば、前の例で ips の 1 つにゼロ以外の値を取得したのはなぜですか?