我正在尝试编写一个执行以下操作的实用程序:
实施第2项和第3项的好方法是什么?到目前为止,我正在执行以下操作以获取我从文件中解析的IP地址数的总数:
if (strstr (line, "IP_Address=128.10.")) {
fprintf(ofp, "%s\n", line);
ip_addresses++; // counter for IP addresses starting with 128.10
}
我应该如何将已解析的IP地址与我的主列表进行比较,以及在检查IP列表时如何检测丢失的IP地址?
答案 0 :(得分:3)
我会在读取时将每个IP地址转换为32位无符号整数(至少假设是IPv4,似乎就是这种情况)。
然后我将它们插入到矢量中并对它们进行排序。对主列表执行相同操作,并使用std::set_difference
查找差异。
答案 1 :(得分:0)
首先,将地址转换为无符号整数。假设您将解析后的地址保留为整数数组,代码可能如下所示:
// If ip is 195.102.45.203, then unsigned int IP = {195, 102, 45, 203};
unsigned int identifier = 0;
identifier = ((IP[0]*255 + IP[1])*255 + IP[2])*255 + IP[3];
将所有标识符插入某个向量,对其进行排序并对主列表中的地址执行相同操作。然后检查是否有遗漏。