먼저 예제 코드를 살펴보겠습니다.
다음과 같이 코드 코드를 복사합니다 .
클래스프
{
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(position2+1,position3));
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
}
개인정적문자열longtoip(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(".");
returnb.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));
}
}
실행 결과:
IP 주소의 다양한 표현:
32비트 바이너리 형식: 11001010011100000110000010100011
십진수 형식: 3396362403
일반 형식: 202.112.96.163.
출력 완료(1초 소요) - 정상 종료 단계별로 지식 포인트를 분석해 보겠습니다. n 비트만큼 왼쪽으로 이동한 이진수는 해당 숫자의 값에 2의 n승을 곱하고 2로 나누는 것입니다. 즉 오른쪽으로 한 자리 Shift
1. IP 주소를 정수로 변환 <BR>원리: IP 주소의 각 세그먼트는 8비트 부호 없는 정수, 즉 0~255로 간주할 수 있습니다. 각 세그먼트를 이진 형식으로 분할하여 결합한 후 이를 변환합니다. Unsigned 32에 대한 이진수는 정수입니다.
예: IP 주소는 10.0.3.193입니다.
숫자의 각 세그먼트에 해당하는 이진수
1000001010
000000000
300000011
19311000001
조합은 00001010000000000000001111000001 입니다. 십진수로 변환하면 167773121 즉, IP 주소를 변환한 숫자가 됩니다.
코드는 다음과 같습니다
다음과 같이 코드 코드를 복사합니다 .
공개클래스Ip{
publicstaticvoidmain(String[]args){
System.out.print(ip2int("10.0.3.193"));
}
publicstaticlongip2int(Stringip){
String[]items=ip.split(".");
returnLong.valueOf(항목[0])<<24
|Long.valueOf(항목[1])<<16
|Long.valueOf(항목[2])<<8
|Long.valueOf(항목[3]);
}
}
2. 정수를 IP 주소로 변환 <BR>원리: 이 정수를 32비트 이진수로 변환합니다. 왼쪽에서 오른쪽으로 8비트마다 나누어 8비트 이진수 4개 세그먼트를 정수로 변환하고 "."을 추가합니다. 예: 167773121
이진 표현은 다음과 같습니다: 00001010000000000000001111000001
이를 4개의 세그먼트(00001010, 00001010, 00000011, 11000001)로 나눕니다. 이를 정수로 변환하고 "."을 추가하면 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);
returnb.toString();
}
}