반응형

ASCII code를 활용하여 정수형 데이터를 문자열로 변경 할 수 있다.

 

 

정수형 데이터를 char형으로 변환해보기

다음 예제를 보자.

 

int의 자료형을 바로 chat에 넣으면?

public class intTochar {

	public static void main(String[] args) {
		int n = 65;
		char test = (char) n;
		System.out.println(test);
	}
}

결과값은 A가 찍힌다.

65의 정수값은 A가 나온다.

타입캐스팅을 처리하여 65의 정수 데이터를 처리하니 A가 나왔다.

65, A 아스키코드표의 데이터이다.

 

구글링에서 아스키코드표를 검색해보면 각  진수별 아스키코드 데이터를 확인 할 수 있다.

10진법 65의 아스키코드가 A이기 때문에 test변수의 값은 A가 나오는 것을 볼 수 있다.

 

여기서 우리가 원하는 숫자 데이터를 변환하려면 어떻게 하면 될까?

아스키코드값의 '0'에 해당하는 값만큼 더해주고 시작하면 된다.

 

아스키코드값 더하기

public class intTochar {

	public static void main(String[] args) {
		int n = 1;
		char test = (char) (n + '0');
		System.out.println(test);
	}
}

원하는 1의 값이 나왔다.

아까와의 차이가 있다면 '0'을 더해주는 작업이 추가되었다.

아스키코드의 '0'의 값은 10진수 값 48이다.

 

실제로 48을 더해주면 어떻게 될까?

public class intTochar {

	public static void main(String[] args) {
		int n = 1;
		char test = (char) (n + 48);
		System.out.println(test);
	}
}

동일한 1을 얻는다.

예상한대로 동일한 값을 얻을 수 있다.

char test = (char) (n + '0'); 이 부분에서 +'0'은 실제로 48을 더해준 값이기 때문이다.

 

 

Character.forDigit()

타입캐스팅방식이 아닌 메소드를 통해 형변환도 가능하다.

public class intTochar {

	public static void main(String[] args) {
		int REDIX = 10; // redix 10은 십진수이고 hexa는 redix 16입니다.  
		int a = 5 ;    
		char c = Character.forDigit (a, REDIX);   
		System.out.println(c);
	}
}

메소드를 활용

 

10이 넘어가면?

10이 넘어가면 어떻게 될까?

public class intTochar {

	public static void main(String[] args) {
		int n = 10;
		char test = (char) (n + '0');
		System.out.println(test);
	}
}

: 이라니!

아스키코드표를 계속 언급하였으니, 눈치채신분들은 이미 알고 있었겠지만 당연히 10부터는 나오지 않는다.

'0'은 48이라고 하였다. 10 + 48의 아스키코드표의 값은 ':'이므로 당연히 저런 결과가 나온다.

 

애초에 10의 값을 문자열 형태로 표현하고 싶어서 char를 접근하였다면... 잘 못된 접근이므로 정수형을 문자열로 변경하는방법을 찾는것이 더 빠르고 효율적이였을겁니다.

 

반응형