我正在尝试使用htonl(inet_addr(IP_str))
.
问题是该函数对 B 类和 C 类的 IP 地址返回否定结果。
这是我的一些代码(简化):
int main() {
const char IP1[] = "10.0.0.0"; //Class A
const char IP2[] = "20.0.0.0"; //Class A
const char IP3[] = "126.0.0.0"; //Class A
const char IP4[] = "128.0.0.0"; //Class B
const char IP5[] = "160.0.0.0"; //Class B
const char IP6[] = "190.0.0.0"; //Class B
const char IP7[] = "193.0.0.0"; //Class C
const char IP8[] = "200.0.0.0"; //Class C
uint32_t integer_ip;
integer_ip = htonl(inet_addr(IP1));
printf("IP1: %s ------> Integer: %d\n",IP1,integer_ip);
integer_ip = htonl(inet_addr(IP2));
printf("IP2: %s ------> Integer: %d\n",IP2,integer_ip);
integer_ip = htonl(inet_addr(IP3));
printf("IP3: %s ------> Integer: %d\n",IP3,integer_ip);
integer_ip = htonl(inet_addr(IP4));
printf("IP4: %s ------> Integer: %d\n",IP4,integer_ip);
integer_ip = htonl(inet_addr(IP5));
printf("IP5: %s ------> Integer: %d\n",IP5,integer_ip);
integer_ip = htonl(inet_addr(IP6));
printf("IP6: %s ------> Integer: %d\n",IP6,integer_ip);
integer_ip = htonl(inet_addr(IP7));
printf("IP7: %s ------> Integer: %d\n",IP7,integer_ip);
integer_ip = htonl(inet_addr(IP8));
printf("IP8: %s ------> Integer: %d\n",IP8,integer_ip);
return 0;
}
结果:
IP1: 10.0.0.0 ------> Integer: 167772160
IP2: 20.0.0.0 ------> Integer: 335544320
IP3: 126.0.0.0 ------> Integer: 2113929216
IP4: 128.0.0.0 ------> Integer: -2147483648
IP5: 160.0.0.0 ------> Integer: -1610612736
IP6: 190.0.0.0 ------> Integer: -1107296256
IP7: 193.0.0.0 ------> Integer: -1056964608
IP8: 200.0.0.0 ------> Integer: -939524096
我在像这样的一些在线工具上测试了结果。
考虑这行输出:
IP5: 160.0.0.0 ------> Integer: -1610612736
-1610612736
等于160.0.0.0
whiles1610612736
等于96.0.0.0.
对我来说最重要的要求是速度。我不想检查每个 IP 是否属于 A 类。
我该如何解决这个问题?
谢谢?