2015-12-10 41 views
1

我跟着https://stackoverflow.com/a/2241269/2458223答案(威廉布倫德爾的建議),但大部分的時間返回錯誤的結果時,我比較MYSQL的結果。請查看問題:當用MYSQL相比java.net.InetAddress中的結果是錯誤的結果

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 | 
+----------------------------+ 

什麼是問題在這裏..任何bug?請幫忙!!

回答

0

是不是在Java -1143829760中的結果?不是1143829760?

不管怎樣,在Java中,

渦卷(bar.getAddress())getInt();

它返回 「符號整型」,並在MySQL中,

INET_ATON();

它返回 「無符號整型」。

的IP地址 「187.210.139.0」 可以被轉換成二進制數是:

1011 1011(187)。 1101 0010(210)。 1000 1011(139)。 0000 0000(0)

這些函數和方法在將IP轉換爲二進制數後刪除點(。)。

然後他們計算出該地址。

這就是爲什麼 「INET_ATON()」 返回較大數量比 「包裝(bar.getAddress())getInt()」 的原因;

+0

是的,它返回-1143829760 –