ISSUE:与MYSQL结果相比,java.net.InetAddress结果错误

时间:2015-12-10 09:24:44

标签: 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 |
+----------------------------+

这里有什么问题..任何错误?请帮助!!

1 个答案:

答案 0 :(得分:0)

Java -1143829760中的结果不是?不是1143829760?

无论如何,在Java中,

  

包裹(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()”;