< 문제 >
-
개요
IP 주소 알아보기. 32bit의 IP 주소를 입력으로 받아 8자리씩 끊어서 10진수로 바꾸어 출력해 보자.
공백 없이 이진수 32자리 숫자를 입력으로 받아서 우리가 아는 형태의 IP주소인 10진수.10진수.10진수.10진수 로 출력한다. -
예상 결과
예상 결과는 하기 코드 실행시 예상되는 결과 값이다.
11001011100001001110010110000000 » IP 주소 : 203.132.229.128
< 정답풀이 >
public class Test02 {
private static final String result = "결과 : %s >> IP 주소 : %s";
public static void main( String[] args ) {
// 시작시간 기록
long startTime = System.currentTimeMillis();
// STEP 1. TEST 데이터 준비
String binaryIp = "11001011100001001110010110000000";
// STEP 2. 실행
String resultIp = IpAddress( binaryIp );
System.out.println( String.format( result, binaryIp, resultIp ) );
// 종료시간 기록
long endTime = System.currentTimeMillis() - startTime;
System.out.println( "소요시간 : " + endTime + "ms." );
}
/**
* <PRE>
* 2진수 형태의 IP 주소를 10진수 형태의 IP 주소로 변환한다
* </PRE>
*
* @param original
* @return
*/
private static String IpAddress( String binary ) {
StringBuffer sb = new StringBuffer();
int size = binary.length();
// STEP 1. 8자리씩 문자를 자른다.
for ( int inx = 0 ; inx < size ; inx += 8 ) {
String temp = binary.substring( inx, inx + 8 );
char[] charArr = temp.toCharArray();
int sum = 0;
int exponent = charArr.length;
//STEP 2. 잘라진 8자리 문자 각각을 숫자로 변환하여 10진수로 변환한다.
for ( int jnx = 0 ; jnx < exponent ; jnx++ ) {
int num = Integer.parseInt( String.valueOf( charArr[jnx] ) );
System.out.print( num );
// Math.pow(밑수, 제곱근)
sum += num * Math.pow( 2, exponent - jnx - 1 );
}
sb.append( sum ).append( "." );
}
return sb.toString().substring( 0, sb.length() - 1 );
}
/**
* <PRE>
* 2진수 형태의 IP 주소를 10진수 형태의 IP 주소로 변환한다
* </PRE>
*
* @param original
* @return
*/
private static String IpAddressOther( String binary ) {
StringBuffer sb = new StringBuffer();
int size = binary.length();
// STEP 1. 8자리씩 문자를 자른다.
for ( int inx = 0 ; inx < size ; inx += 8 ) {
String temp = binary.substring( inx, inx + 8 );
//STEP 2. Java API를 이용하여 2진수를 10진수로 변환한다.
int num = Integer.parseInt( temp, 2 );
sb.append( num ).append( "." );
}
return sb.toString().substring( 0, sb.length() - 1 );
}