문자 인코딩의 예로써는 대표적으로 많이들 들어보신
바로 아스키코드(ASCII) 가 있죠.
많은 인코딩들 중에서 왜 ASCII 코드를 언급했느냐 하면 말입니다,
C언어에서는 ASCII 코드를 사용하기 때문이죠.
우리가 C언어를 하면서 적어도 알아야 하는 대표적인 아스키 코드 넘버들이 있습니다.
A(65), a(97), 0(48)
뭐 이 셋만 알면 나머지 것들은 알기 쉽겠죠...
다른 인코딩들에서는 정수와 문자를 구분합니다.
넌 문자고! 난 정수야! (어디서 많이 들어본듯한.... 나만 재밌음 ㅋㅋㅋ)
하지만 C/C++에서는 문자 형식이라는 것이 존재하지 않습니다.
근데 문자 어떻게 쓸 수 있냐... 라고 저한테 버럭하신다면... 그러지 마세요...
장난이구, 근데 맞아요.
단지 정수형식의 문자를 담아내는 것 뿐이에요.
말이 어렵나요?
다시 말씀드린다면, C언어는 문자라는 것을 가지고 있지 않다는 것입니다.
단지 정수와 실수만을 가지고 있는 것이죠...
데이터 타입만 봐도 아시는게
정수형(char, short, int, long), 실수형(float, double) 은 있지만
문자형은 따로 없습니다.
일반적으로 C언어에서 문자를 char, int형 변수에다가 쓰는 것일 뿐입니다.
그렇다면 문자를 왜 대부분 char형에 다가 쓰냐 하면
어차피 1 Byte를 넘지 않으니까 char에다가 쓰게 되는 것입니다.
왜? C언어의 문자 형식은 ASCII라고 했으며
ASCII 코드는 127까지 밖에 없기 때문에 1 Byte를 넘을 일이 없기 때문입니다.
C#이나 Java와 같이 최신(?) 언어들같은 경우에는
유니코드만을 받는다고 하더군요...
C언어는 기억하시죠... 모두 정수로 담고 있다는 것을...
단, 어떻게 표현할지에 대해서만 정해주면 문자열도 사용할 수 있다 이겁니다.
물론, 다른 언어들에 비해 문자열을 다루기가 어렵죠...
다른 언어들은 알아서 다 처리를 해주지만
C언어같은 경우에는 내가 다 해야되거든요...
코드를 한번 보시죠
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> #include <conio.h> void main() { int n = _getch(); switch ( n ) { case 1 : printf("A\n"); break; case 2 : printf("B\n"); break; case 3 : printf("C\n"); break; default: printf("default...\n"); break; } } | cs |
우선, 우리는 _getch() 라는 함수를 사용하기 위해
그 함수가 들어있는 conio.h 헤더파일을 선언했습니다.
_getch() 함수의 기능은 키보드로 1자를 입력받는다는 것입니다.
코드를 간단하게 해석하자면
int형 변수에 1자가 입력 받게 됩니다.
스위치 문에서는 1, 2, 3 그리고 default의 case 문이 있군요...
확인을 위해서 1, 2, 3 을 하나씩 입력해보세요...
어떻게 될까요? 3초동안 생각해보시고~ 하나 둘 셋 끝...
다 default로 나와요... 왜냐?
우리가 백날 1, 2, 3, 4 ... 입력해도 C언어에서는 ASCII 코드로 생각해요
결국 1, 2, 3 눌러도 C언어에서는 49, 50, 51로 생각한다는 것이죠...
그럼 어떻게 해요... 라고 말씀드리자면
대표적으로 각 case 문의 1, 2, 3을 문자열로 만들면 되겠죠...
'1', '2', '3' 이런식으로 만든다면
컴파일러는 아... 49, 50, 51이군! 이렇게 인식한다는 것입니다.
즉, 컴파일러는 모든 문자를 정수로 생각한다는 점.
C/ C++은 유효성검사와 같이 필터링하는 기능이 없기 때문에
위에서 말했듯이 우리가 직접 다 해줘야되요...
불편할 수도 있겠죠... 하지만 나름 장점도 있다는 점.
프로그램을 하는 분야에는 각자에 최적화 되어있는 프로그래밍 언어들이 있겟죠...
아두이노와 같은 프로그램의 경우 다 C++로 구현한다고 해요...
불편한데 왜 하냐...
왜냐하면 기기를 세세하게 컨트롤해야할 필요성이 있는 그 분야에서는
C/C++이 굉장히 어울리기 때문이죠.
아무튼... 우리 눈에는 문자로 보이더라도
C언어로 볼 때는 모두 정수라는 거...
우리 눈에는 1, 2, 3은 1, 2, 3이지만
컴파일러에게는 백날 49, 50, 51이라는 거...
아오... 왜 이렇게 만들었대...
이런 생각은 노노하시죠,... 받아드리세요! 아하하...
재밌다~ C언어 재밌죠...
뭔가 봐도 봐도 새롭네요... 초보라 그런가...
'삽질의 현장 > - C' 카테고리의 다른 글
곱씹어보자 C!_#011_ 삽잡이의 두서없이 막말하는 문자열(2) (0) | 2015.06.24 |
---|---|
곱씹어보자 C!_#010_ 삽잡이의 두서없이 막말하는 문자열(1) (0) | 2015.06.24 |
곱씹어보자 C!_#008_ 삽잡이의 두서없이 막말하는 C언어의 꽃! 포인터 (0) | 2015.06.23 |
곱씹어보자 C!_#007_ 삽잡이의 두서없이 막말하는 제어문 반복문 (0) | 2015.06.23 |
곱씹어보자 C!_#006_삽잡이의 두서없이 막말하는 연산자들 (0) | 2015.06.23 |