我遵循了 https://stackoverflow.com/a/2241269/2458223 中的答案(William Brendel 建议的)但是当我将结果与 MYSQL 进行比较时,大多数时候会返回错误的结果。请查看
InetAddress bar = InetAddress.getByName("187.210.139.0");
value = ByteBuffer.wrap(bar.getAddress()).getInt();
您可以在此处查看结果...
JAVA 结果:(引用:http://ideone.com/CJ3qCU)
returns: 1143829760
MYSQL 结果:
mysql> select inet_aton("187.210.139.0");
+----------------------------+
| inet_aton("187.210.139.0") |
+----------------------------+
| 3151137536 |
+----------------------------+
这里有什么问题..任何错误?请帮忙!!
最佳答案
Java的结果不是-1143829760吗?不是 1143829760 吗?
无论如何,在 Java 中,
wrap(bar.getAddress()).getInt();
它返回“signed int”,在mysql中,
inet_aton();
它返回“unsigned int”。
IP地址“187.210.139.0”可以转换成二进制数是:
1011 1011(187). 1101 0010(210). 1000 1011(139). 0000 0000(0)
这些函数和方法读取这个把IP转换成二进制后去掉点号(.)。
然后他们计算那个地址。
这就是为什么“inet_aton()”返回的数字比“wrap(bar.getAddress()).getInt()”大的原因;
关于java - ISSUE : java.net.InetAddress RESULTS 与 MYSQL 结果相比是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34197975/