是否有可以将IP地址截断为/ 24的方法? 或者,我应该手动解析IP地址并进行转换吗?
编辑:
IP地址是IPv4,并以引号char *
包围的虚线十进制格式存储。我期待/ 24也是char *
。
示例格式:" 64.233.174.94" 。
/ 24预期格式:" 64.233.174.0"
希望这会有所帮助。感谢。
答案 0 :(得分:1)
将IP地址和/ 24掩码的字符串规范转换为网络字节顺序的二进制IP地址,按位和它们一起,然后将结果转换为字符串:
#include <arpa/inet.h>
inet_ntoa(inet_addr("64.233.174.94") & inet_addr("255.255.255.0"))
答案 1 :(得分:0)
另一个答案是为真正的计划做更好的方法。
您是否意识到点分十进制表示法仅用于使人类更容易处理IP地址?实际上,计算机将IPv4地址存储为32位整数。
这是一些代码,它演示了如何从点分十进制字符串中获取整数值。请注意,这是我很快就被淘汰的内容,仅用于展示这个想法。
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
const char* ip = "192.168.1.25";
const char* p = ip;
const int len = strlen(ip);
int tmp, octet;
unsigned accum, reducingmultiplier = 16777216;
accum = tmp = octet = 0;
for (int i = 0; i < len; ++i) {
if (*p != '.') {
tmp = *p - 0x30;
octet *= 10;
octet += tmp;
}
else {
printf("got to dot, octet = %u\n", octet);
accum += octet * reducingmultiplier;
reducingmultiplier /= 256;
octet = 0;
}
p++;
}
printf("got to end of string, final octet = %u\n", octet);
accum += octet * reducingmultiplier;
printf("String IP address: %s converted to an integer: %u\n", ip, accum);
return 0;
}
一旦你将数字存储为一个整数,你就可以和你的子网掩码一起使用/ 24或任何形式。然后,您将转换回字符串格式。