1

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

ここでの問題は何ですか..バグはありますか?? 助けてください!!

4

1 に答える 1

0

結果は Java -1143829760 ではありませんか? 1143829760じゃない?

とにかく、ジャバでは、

wrap(bar.getAddress()).getInt();

「signed int」を返し、mysqlでは、

inet_aton();

「unsigned int」を返します。

IP アドレス「187.210.139.0」を 2 進数に変換できるのは、次のとおりです。

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

これらの関数とメソッドは、IP を 2 進数に変換した後、このドット (.) を削除して読み取ります。

そして、彼らはその住所を計算します。

これが、「inet_aton()」が「wrap(bar.getAddress()).getInt()」よりも大きな数値を返す理由です。

于 2015-12-10T10:07:42.423 に答える