不确定我错过了什么。 我想确定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的范围内?
答案 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.0
和255.255.252.0
转换为in_addr_t
值。然后将这些结果与您感兴趣的值进行比较。你会期待什么?