java - ISSUE : java.net.InetAddress RESULTS 与 MYSQL 结果相比是错误的

标签 java mysql inetaddress inet-aton

我遵循了 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/

相关文章:

mysql - 半随机顺序

mysql - 在范围条件中使用值时出错

MYSQL——如何去除字符串中间的字符

java - GWT开发模式错误

c# - Xamarin INetAddress.GetByName 总是抛出异常

java - getLocalHost 和 getByName ("localhost"的 IP 地址不同)..为什么会这样?

Java Swing - 如何处理 ActionListener 中的泛型

基于Java的配置和工厂模式

java - 如果 hashCode() 没有被覆盖,HashSet 允许重复项插入

java - m2eclipse maven 构建参数