比较C中字符串格式的2个IP地址

时间:2013-04-22 21:51:41

标签: c++ networking

不确定我错过了什么。 我想确定IP地址172.27.12.32是否属于IP地址20.0.0.0和255.255.252.0的范围

我正在做的是以下内容:

std::string one("200.0.0.0");
std::string two("172.27.12.32");
std::string three("255.255.255.255");

long one_addr = inet_addr(one.c_str());
long two_addr = inet_addr(two.c_str());
long three_addr = inet_addr(three.c_str());

one_addr等于200 two_addr等于537664428 three_addr等于4294967295

two_addr大于one_addr,但如果最小IP地址为200.0.0.0,则172.27.12.32不在范围内

如何确定172.27.12.32是否不在200.0.0.0和255.255.255.255的范围内?

2 个答案:

答案 0 :(得分:4)

提示:=)(http://www.stev.org/post/2012/08/09/C++-Check-an-IP-Address-is-in-a-IPMask-range.aspx

uint32_t IPToUInt(const std::string ip) {
    int a, b, c, d;
    uint32_t addr = 0;

    if (sscanf(ip.c_str(), "%d.%d.%d.%d", &a, &b, &c, &d) != 4)
       return 0;

    addr = a << 24;
    addr |= b << 16;
    addr |= c << 8;
    addr |= d;
    return addr;
}

希望这足以回答你的问题

答案 1 :(得分:0)

inet_addr() function返回in_addr_t结构实例:

in_addr_t inet_addr(const char *cp);

这通常是32位整数的typedef,在每个架构上并不总是很长。

无论如何,请考虑将20.0.0.0255.255.252.0转换为in_addr_t值。然后将这些结果与您感兴趣的值进行比较。你会期待什么?