8

DhcpInfo.ipAddress から人間が読める IP アドレスを取得する方法を知りたいですか? それについてのトリッキーなことは、それが整数であり、明らかに IP アドレスを整数に格納できないことです。では、IP アドレスはどのようにエンコードされ、int に格納できるのでしょうか? ドキュメントはこの問題に何の助けにもなりません: http://developer.android.com/reference/android/net/DhcpInfo.html#ipAddressありがとう:-)

4

5 に答える 5

8

この関数を使用 NetworkUtils.java \frameworks\base\core\java\android\net)

public static InetAddress intToInetAddress(int hostAddress) {
    byte[] addressBytes = { (byte)(0xff & hostAddress),
                            (byte)(0xff & (hostAddress >> 8)),
                            (byte)(0xff & (hostAddress >> 16)),
                            (byte)(0xff & (hostAddress >> 24)) };

    try {
       return InetAddress.getByAddress(addressBytes);
    } catch (UnknownHostException e) {
       throw new AssertionError();
    }
}
于 2012-06-05T04:40:28.383 に答える
8

実際にできます。

int としての IP アドレス:AABBCCDD人間が判読できる形式ではありますAA.BB.CC.DDが、10 進数です。ご覧のとおり、ビット演算を使用するか、int をバイト配列に変換することで、簡単に抽出できます。

写真を見てください:

ここに画像の説明を入力

于 2011-06-14T15:02:59.597 に答える
5

他のポスターで言及されているように、IP アドレスは 1 つの int にパックできる 4 バイトです。アンドレイは、その方法を示す素敵なイラストを提供してくれました。InetAddress オブジェクトに格納すると、ToString() を使用して、人間が読めるバージョンを取得できます。何かのようなもの:

byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
InetAddress address = InetAddress.getByAddress(bytes);
String s = address.ToString();
于 2011-06-14T15:14:42.640 に答える
5

明らかに、IPアドレスを整数に格納することはできません

実際、IP (v4) アドレスは 32 ビット整数 (IPv6 の場合は 128 ビット) です。

あなたが話している「人間が読める」形式は、整数のビットを「オクテット」と呼ばれる8のグループに分割し、「」などの基数10に変換することによって生成されます192.168.0.1

このアドレスのビットは次のようになります (読みやすくするためにスペースが追加されています)。

11000000 10101000 00000000 00000001

これは 10 進整数 3,232,235,521 に対応します。

于 2011-06-14T15:01:44.617 に答える
0

バイト単位で受け取ったIPアドレスを逆にするだけです

byte[] bytes = BigInteger.valueOf(ipAddress).toByteArray();
ArrayUtils.reverse(bytes);
// then
InetAddress myaddr = InetAddress.getByAddress(ipAddress);
String ipString = myaddr.getHostAddress();
于 2014-11-14T07:39:50.590 に答える