메모리 절약을 위해 문자로 상수 표현하기. ( char(1) 로 int(4) 표현. )
가끔 오픈 소스나 조금 오래된 소스들을 보다 보면,
옛날의 사양이 좋지 못한 장비때문인지 메모리를 아끼기 위한
개발자들의 깨알같은 잔머리? 가 조금씩 보인다.
그중 하나가 이 방법이다.
int 형과 char 형.
이둘중 메모리를 더 많이 필요로 하는건 당연히 int 형이다.
그래서 char 형을 이용해 int 형의 상수를 표현할수 있게끔,
아스키 코드값을 이용한 코딩이다.
예제 소스 및 결과 화면.
소스.
결과.
간략한 소스이므로 , 선언부나 출력문에 대한 설명은 스킵..
a 라는 배열안에 "1234" 를 초기값 으로 던저주고
이걸 한자리씩 %d 로 찍으면
a 0번지에 있는 값은 상수 1 이 아닌 문자 '1' 이므로 '1' 에 대한 아스키 코드 값이 나오게 된다.
하지만 여기에 '0' 을 뺴버리면 아스키 코드 값인 49가 나오지 않고
내가 원하는 상수 1 이 나온다.
이러한 결과가 나오게 되는 원리는
아스키 코드 표를 보시면
바로 알수 있는데,
'0' 의 아스키 코드 값은 48 이고
'1' 은 49, '2' 는 50....'9' 는 57 이다.
아스키 코드 값 49를 가진 '1' 에 아스키 코드값 48을 가진 '0' 을 빼버리면 ?
값은 1이 남고 결국 상수 1이라는 값을 갖게된다.
이런식으로 코딩을 해서 사용할수 있는건,
패킷 통신에서 받은 버프안의 값을 이용해
switch 문 등에서 1, 2, 3, 4...9 등의 case 를 조건으로 걸어야 할때
굳이 int 형 변수를 두고 atoi 로 받아오지 않고도
-'0' 을 해주면 상수 1~9 까지의 값을 가질수 있게 된다.
지금이야...장비들 성능이 좋아서, 굳이 메모리를 잔뜩 아껴가면서
개발을 할 필요성이 크진 않지만,
혹시나 열악한 환경에서의 개발이 이뤄진다면,
써먹을만한 방법이 아닌가 싶다.
'C/C++ > Tip' 카테고리의 다른 글
[CTAGS] 손쉽게 함수 따라가기 !! (2) | 2014.06.20 |
---|---|
[VI 편집기] 개발 혹은 소스분석 할때 유용한 화면 분할 방법. (0) | 2014.06.20 |
[한글 코드표] 유니코드 , KS5601 코드 표. (0) | 2014.06.20 |
[C 파싱] 파싱 할때 팁. (0) | 2014.05.28 |
[문자열 처리] sprintf 와 snprintf 의 차이점. (0) | 2014.05.28 |