【发布时间】:2017-04-30 15:07:43
【问题描述】:
我有一个包含 100 多个 IP 地址的文件(点分十进制,例如 169.23.43.12)。现在我需要读取所有的 IP 地址并按升序排序。为此,首先我尝试将所有的ip地址转换为其等效的整数。我创建了一个c++函数来转换ip地址,但它不适用于大ip地址,例如255.250.120.100。我尝试使用inet_aton() 和inet_ntoa()。但是使用这两个,我无法对 IP 地址进行排序。所以,请给我一个想法,将 IP 地址转换为可以排序的形式。下面是一些代码,我尝试使用这些代码对 IP 地址进行排序,但没有奏效。
struct sockaddr_in 羚羊[2]; char *some_addr;
inet_aton("60.0.0.4", &antelope[0].sin_addr); // store IP in antelope
inet_aton("10.0.0.2", &antelope[1].sin_addr); // store IP in antelope
std::sort(antelope,antelope+2);
cout<<inet_ntoa(antelope[0].sin_addr)<<endl;
cout<<inet_ntoa(antelope[1].sin_addr)<<endl;
【问题讨论】:
-
什么不起作用?错误是什么? std::sort 不知道如何订购 sockaddr_in 结构。
-
std::sort 给出了一些错误。那么,在使用 inet_aton() 之后,我该如何对它们进行排序呢?你知道任何排序它们的程序吗?
-
你用过无符号整数吗?如果您使用有符号整数,则可能会发生您遇到的行为。
-
我在自己的函数中使用无符号整数将 IP 地址转换为整数。它适用于像 10.10.127.12 这样的小型 IP 地址。当我在 32 位操作系统机器中输入 255.234.100.3 之类的 IP 地址时,它会给出准确的结果。但它在 64 位操作系统机器中给出了非常大的数字。
标签: c++ sorting ip-address