まずコード例を見てみましょう。
次のようにコードをコピーします。
授業
{
privatestaticlongiptolong(文字列ストリップ)
//127.0.0.1 の形式の IP アドレスを 10 進整数に変換します。ここではエラー処理は実行されません。
{
intj=0;
インティ=0;
long[]ip=newlong[4];
intposition1=strip.indexof(".");
intposition2=strip.indexof(".",position1+1);
intposition3=strip.indexof(".",position2+1);
ip[0]=long.parselong(strip.substring(0,position1));
ip[1]=long.parselong(strip.substring(位置1+1,位置2));
ip[2]=long.parselong(strip.substring(位置2+1,位置3));
ip[3]=long.parselong(strip.substring(位置3+1));
return(ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3];//ip1*256*256*256+ip2*256* 256+ip3*256+ip4
}
privatestaticstringlongtoip(longlongip)
//10 進整数形式を 127.0.0.1 形式の IP アドレスに変換し、コマンド プロンプトで ping3396362403l と入力します。
{
stringbuffersb=newstringbuffer("");
sb.append(string.valueof(longip>>>24));//24ビット直接右シフト
sb.append(".");
sb.append(string.valueof((longip&0x00ffffff)>>>>16));//上位8ビットを0に設定し、16ビット右シフト
sb.append(".");
sb.append(string.valueof((longip&0x0000ffff)>>>>8));
sb.append(".");
sb.append(string.valueof(longip&0x000000ff));
sb.append(".");
b.tostring(); を返します。
}
publicstaticvoidmain(string[]args)
{
system.out.println("IP アドレスのさまざまな表現: rn");
system.out.print("32 ビット バイナリ形式: ");
system.out.println(long.tobinarystring(3396362403l));
system.out.print("10 進形式:");
system.out.println(iptolong("202.112.96.163"));
system.out.print("共通形式:");
system.out.println(longtoip(3396362403l));
}
}
実行結果:
IP アドレスのさまざまな表現:
32 ビット バイナリ形式: 11001010011100000110000010100011
10 進数形式: 3396362403
一般的な形式: 202.112.96.163。
出力完了 (1 秒かかります) - 正常終了 知識ポイントを段階的に分析してみましょう: n ビット左にシフトされた 2 進数は、数値の値に 2 の n 乗を乗算して 2 で除算します。つまり、右に 1 位置シフトします
1. IP アドレスを整数に変換する<BR>原則: IP アドレスの各セグメントは 8 ビットの符号なし整数、つまり 0 ~ 255 とみなすことができ、各セグメントをバイナリ形式に分割して結合し、これを変換します。 2 進数を符号なし 32 に変換すると整数になります。
例: IP アドレスは 10.0.3.193 です
数値の各セグメントに対応する 2 進数
1000001010
000000000
300000011
19311000001
組み合わせは、00001010000000000000001111000001、10進数に変換すると、167773121、つまりIPアドレスの変換数値となります。
コードは次のとおりです
次のようにコードをコピーします。
パブリッククラスIp{
publicstaticvoidmain(String[]args){
System.out.print(ip2int("10.0.3.193"));
}
publicstaticlongip2int(Stringip){
String[]items=ip.split(".");
returnLong.valueOf(items[0])<<24
|Long.valueOf(items[1])<<16
|Long.valueOf(items[2])<<8
|Long.valueOf(項目[3]);
}
}
2. 整数を IP アドレスに変換します。 <BR>原理: この整数を 32 ビットの 2 進数に変換します。左から右に 8 ビットごとに分割し、8 ビットの 2 進数を 4 つのセグメントに変換し、「.」を追加します。例: 167773121。
バイナリ表現は次のとおりです: 00001010000000000000001111000001
これを 00001010、00001010、00000011、11000001 の 4 つのセグメントに分割し、整数に変換して「.」を追加すると、10.0.3.193 が得られます。
コードは次のとおりです
次のようにコードをコピーします。
パブリッククラスIp{
publicstaticvoidmain(String[]args){
System.out.print(int2ip(167773121));
}
publicstaticStringint2ip(longipInt){
StringBuildersb=newStringBuilder();
sb.append(ipInt&0xFF).append(".");
sb.append((ipInt>>8)&0xFF).append(".");
sb.append((ipInt>>16)&0xFF).append(".");
sb.append((ipInt>>24)&0xFF);
b.toString(); を返します。
}
}