Client/C# with Unity

[Unity C#] String to int, Char to int

Ardmos :) 2022. 1. 8. 23:30

String을 int형으로 바꾸는 방법은 간단하다. 

 

int.Parse(string s) 를 사용해주면 끝!!  

 

 

 

하지만 아래와 같은 char 형을 int형으로 바꿔주려고 캐스팅을 하게되면 

char a = '3'

 

print( (int)a )

의도와는 다르게 결과값으로 3 대신 51이란 숫자를 보게될것이다. 

 

이유가 뭘까? 

 

 

 

위 그림은 아스키 코드표의 일부분을 캡쳐한 것인데, 각 문자를 int형으로 바꾸게 되면 왼편의 파란 원에 있는 숫자들로 바뀌어 출력되게 된다. 

기본적으론 그 중에서도 가장 왼쪽줄에 있는 십진수의 형식으로 출력될 것이다. 

 

이 문제를 해결하는 방법들 중 두 가지를 소개하겠다. 

 

 

1. int.Parse를 사용하는 방법. 

 

이 방법을 사용하면 간단하지만, 

int.Parse는 인자로 string 형태의 값만을 받는것이 문제이다.

이 문제를 극복하기 위해 char.ToString()을 해서 사용해주면 된다. 

 

print(int.Parse(a.ToString()))

 

 

2. '0'을 빼주는 방법. 

 

ascii코드표를 참고하면 이해가 쉬운 방법이다.

https://ardmos.tistory.com/entry/%EC%95%84%EC%8A%A4%ED%82%A4%EC%BD%94%EB%93%9C%ED%91%9C

 

아스키코드표

기타 문자표 제어 문자표 #출처. ko.wikipedia.org/wiki/ASCII 위키백과.

ardmos.tistory.com

 

아스키 코드표를 보면 문자

0은 십진수로 48,

1은 49,

2는 50,

3은 51,

4는 52... 

이런 식인걸 알 수 있다. 

바로 이것을 활용하는 방법인데 

 

char a = '3'

char b = '0'

 

이렇게 두 변수가 존재할 경우에 

print(a - b)

위처럼 연산해주게 되면 두 char 변수는 계산될 때 int형으로 변환되어 계산되게 된다.

 

이미 계산될 때 자동적으로 int형이 되기 때문에 따로 캐스팅을 해줄 필요가 없다.

 

연산이 3-0이 아닌, 51-48로써 이루어지게되는 것.  (아스키 코드표 참고)

 

결과적으로 -'0'을 해줌으로써 a-b는 우리가 원하는 변수 a의 값인 3을 int형으로 얻을 수 있다. 

 

print(a-'0')

 

char '0'을 빼기 연산 해줌으로써 정수값을 얻어내고 있다. 물론 이것은 몇 가지 방법중 하나!

 

 

 

 

 

 

 

728x90