java IP 주소와 10진수 상호 변환 실현

먼저 실례 코드를 보면 다음과 같다.운행 결과: IP 주소의 각종 표현 형식: 32비트 2진법 형식: 110010101011000011 10진법 형식: 3396362403 일반 형식: 202.112.96.163.출력 완료(1초 소모) - 정상 종료. 우리는 한 걸음 한 걸음 나누어 지식점을 분석한다. 하나의 2진수, 비트에 따라 왼쪽으로 n위를 이동하는 것은 이 수의 값을 2의 n차방 2진수로 곱한 다음에 오른쪽으로 1을 이동하고 IP 주소를 정수로 전환하는 원리이다. IP 주소는 단락마다 8자리의 기호가 없는 정수인 0-255로 볼 수 있고 단락을 하나의 2진법으로 나누어 조합할 수 있다.그리고 이 2진수를 무기호 32로 정수로 바꾸세요.예를 들어 하나의 IP 주소는 10.0.3.193 각 단락의 숫자에 대응하는 2진수 1000001, 010, 00000000, 3000000, 11, 1931100001을 조합하면 0000, 101000000, 000000, 1111000001이고 10진수로 전환하면 16777321이다. 즉, 이 IP 주소가 전환된 숫자가 바로 그것이다.코드는 아래와 같다
 
classip
{
privatestaticlongiptolong(stringstrip)
// 127.0.0.1 ip 10 ,
{
intj=0;
inti=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(position1+1,position2));
ip[2]=long.parselong(strip.substring(position2+1,position3));
ip[3]=long.parselong(strip.substring(position3+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(".");
returnsb.tostring();
}
publicstaticvoidmain(string[]args)
{
system.out.println("ip :rn");
system.out.print("32 :");
system.out.println(long.tobinarystring(3396362403l));
system.out.print(" :");
system.out.println(iptolong("202.112.96.163"));
system.out.print(" :");
system.out.println(longtoip(3396362403l));
}
}
2, 정수를 IP 주소로 바꾸는 원리: 이 정수를 32비트 이진수로 변환한다.왼쪽에서 오른쪽으로 8자리씩 분할하여 4단 8자리의 2진수를 얻어 이 2진수를 정수로 변환한 다음에 덧붙인다.바로 이 IP 주소입니다. 예를 들어 167773121, 2진법 표시 형식은 다음과 같습니다. 000010000000001111000001은 4단으로 분할됩니다. 00001000010001111000001은 각각 정수로 전환된 후에 덧붙입니다.10.0.3.193을 얻었다.코드는 아래와 같다
 
publicclassIp{
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(items[3]);
}
}

좋은 웹페이지 즐겨찾기