[IP주소 변환 - Easy]

< 문제 >

  • 개요
    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 );
	}