1 분 소요

Int ▶ Char

(char)

타입 캐스팅을 이용해 intchar로 변환할 수 있다.


ASCII

int num = 65;
char numChar = (char) num;

하지만 위와 같이 변환하면 numChar는 65의 아스키코드값인 ‘A’가 된다.

이렇게 (char)만을 사용하면 ASCII 값으로 표현되기 때문에 주의해야 한다.


0~9

ASCII 값이 아닌 char로 변환하기 위해서는 숫자에 작은따옴표 '' 만 붙여주면 된다.

int num = '1'
char numChar = (char) num;


이외에도 문자 ‘0’을 더해주는 방법도 있다.

int num = 3;
char numChar = (char)(num+'0');

그렇다면 왜 ‘0’ 일까?

아래의 아스키코드표를 살펴보자.

ASCII

위의 표를 보면 char’0’의 10진수는 80이다.

각 숫자에 80을 더해 아스키코드표의 ‘0’~’9’를 찾는 것이다.



Character.forDigit​()

오라클 공식 문서에 나와있는 forDigit()은 아래와 같다.

  • 클래스 : java.lang.Character
  • 리턴 타입 : static char
    • 타입이 static 이므로 인스턴스 객체를 생성하지 않고 바로 사용할 수 있다.
  • 메소드 : forDigit(int digit, int radix)
  • 설명 : 지정된 기수의 특정 숫자에 대한 문자 표현을 결정한다.


즉, int 형 숫자를 원하는 진법으로 변환한다는 뜻이다.

int num = 9;
char numChar = Character.forDigit(num, 10); // 9를 10진법으로 변환


16진법으로 변환하고 싶다면 다음과 같이 표현한다.

int num = 12;
char numChar = Character.forDigit(num, 16); // 12를 16진법으로 변환



toString()

여기서 toString()Integer 클래스의 메소드를 말한다.

int형 숫자를 String으로 변환한 후, 변환한 Stringchar 값을 가져 오는것이다.

그렇기 때문에, toString()만을 사용하여 intchar로 변환할 수는 없다.


말로 표현하는 것보다 코드로 보면 더 쉽다.

int num=1;
char numChar = Integer.toString(num).charAt(0);

여기서 charAt(0)numstring으로 변환한 “1”의 0번째 인덱스를 말한다.




Char ▶ Int

Character.getNumericValue()

오라클 공식 문서에 나와있는 getNumericValue()은 아래와 같다.

  • 클래스 : java.lang.Character
  • 리턴 타입 : static int
    • 타입이 static 이므로 인스턴스 객체를 생성하지 않고 바로 사용할 수 있다.
  • 메소드 : getNumericValue​(char ch)
  • 설명 : 지정된 유니코드 문자가 나타내는 int 값을 반환한다.
char newChar = '3';
int newInt = Character.getNumericValue(newChar);


‘0’ 빼기

위에서 설명한 Int to Char 형변환과 같은 원리이다.

char newChar = 'A'
int newInt = newChar - '0'

위를 실행하면 newInt는 ‘A’의 10진수 97에 ‘0’의 10진수 80을 뺀 17이 된다.

그러므로 char형을 변환할때 변수 값에 숫자가 아닌 값을 저장해도 형변환 오류인 NumberFormatException 예외는 발생하지 않는다.

댓글남기기