3

これについてどうすればよいかわかりません。私のプログラムは、ユーザーに IP アドレスを入力させることになっています。次に、プログラムは 10 進数表記で値を返すことになっています。たとえば、134.115.64.1 が入力され、2255699969 が出力されます。

変数に 134,115,64 と 1 を格納できるかどうか疑問に思っていました。もしそうなら、どうすればそれについて行くことができますか? 自分で見つけることができなかったので、あらゆる種類のチュートリアルへのリンクは素晴らしいでしょう。

ありがとう

4

5 に答える 5

2

あなたは次のようなことをすることができます:

String str = "134.115.64.1";

String arr[] = str.split("\\.");

int[] ips = new int[arr.length];
for(int i=0; i<arr.length;i++)
    ips[i] = Integer.parseInt(arr[i]);
于 2012-08-30T06:23:40.893 に答える
2

IP アドレスを解析するためのトリック

BigInteger ip = new BigInteger(1,InetAddress.getByName("134.115.64.1").getAddress());
// or
long ip = InetAddress.getByName("134.115.64.1").hashCode() & 0xffffffffL;

System.out.println(ip);

版画

2255699969
于 2012-08-30T07:24:00.170 に答える
1

私はまだあなたの質問を正しく理解することができません....しかし、それをしようとします...

String s = "134.115.64.1";

    String[] arr = s.split("\\.");

    ArrayList<Long> ar = new ArrayList<Long>();

    for(String j : arr){

    ar.add(Long.parseLong(j)); // All the Number are Stored in this ArrayList

     }

    System.out.println(ar);
于 2012-08-30T06:26:24.860 に答える
0
long longIP(String ip) {
    String[] octets = ip.split("\\.");
    long ipLong = 0;
    for (int i = 0; i < 4; i++) {
        ipLong = ipLong * 256 + Long.parseLong(octets[i]);
    }
    return ipLong;
}
于 2012-08-30T06:44:25.813 に答える
0

正規表現を使用して計算を書き直し、その計算を JavaScript エンジンに渡すことができます。ビットシフト演算子を使用したかったのですが、32 ビットの符号付き数値でしか機能しません。

String input = "134.115.64.1";
String sum = input.replaceAll("(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)",
        "($1 * 16777216) + ($2 * 65536) + ($3 * 256) + $4");
System.out.println(sum);
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");

double result = (Double) engine.eval(sum);
System.out.println((long) result);
于 2012-08-30T07:03:14.187 に答える