看来我说的太粗略了,现在细致的讲一下,请帮忙!
我的IP地址库在致如下:
ip1 ip2 address
002.006.190.056 002.006.190.063 英国比如我得到一个IP地址为:002.006.190.060 我怎么用这个IP和IP1、IP2进行比较呢?
我的IP地址库在致如下:
ip1 ip2 address
002.006.190.056 002.006.190.063 英国比如我得到一个IP地址为:002.006.190.060 我怎么用这个IP和IP1、IP2进行比较呢?
最好看看IP地址的点分法的规则。
由此得到:
(0xFF & byte1 << 24) | (0xFF & byte2 << 16) | (0xFF & byte3 << 8) | (0xFF & byte4)这样就变成了int的比较,呵呵。
应该是:
(0xFF000000 & 0x02 << 24) |
(0x00FF0000 & 0x06 << 16) |
(0x0000FF00 & 0xBE << 8) |
(0xFF & 0x38)
ip1 ip2 country city
162.105.021.000 162.105.021.255 中国 北京大学物理系
162.105.022.000 162.105.022.255 中国 北京大学化学系
162.105.023.000 162.105.023.255 中国 北京大学地球物理系得到一个IP地址后在数据库里进行检索,如果存在满足大于IP1小于IP2的条件的记录,则取country和city两个字段的值,比如我得到的IP是162.105.22.125 肯定不能直接的用IP>IP1 and IP<IP2 进行比较,那应该怎样进行比较呢?不知这样说大家明白我的意图否?
您说的方法我开始用了,动网论坛用的也是这个,可是存在一个问题就是比如000.000.000.000 这个IP如何转成32位的INT型呢?
static final int IP_CHINA_START 0Xxxxxxxxx //中国ip开始值
static final int IP_CHINA_END 0Xxxxxxxxx //中国ip结束值
......
//for examplestatic finale String sampleIP = "162.105.021.000"
String[] subs = sampleIP.split(".");
int intIP = 0;
for (int i = 0; i < subs.length; i++) {
try {
intIP |= Integer.parseInt(subs[i]) << ((3 - i) * 8);
} catch (NumberFormatException e ) {}
}