반응형
C언어에서 char 타입은 문자를 다룰 때 기본적으로 사용됩니다. 하지만 이 타입의 진정한 매력은 문자와 숫자(ASCII 코드)를 모두 다룰 수 있다는 점에 있습니다. 이번 포스팅에서는 char 타입의 개념과 ASCII 코드에 대해 심층적으로 알아보겠습니다.
1. char 타입의 기본 개념
char는 1바이트(8비트) 크기의 데이터 타입으로, 주로 문자(character)를 표현하는 데 사용됩니다. 하지만 내부적으로는 정수형 데이터로 저장되며, 문자에 매핑된 숫자 값(즉, ASCII 코드)으로 동작합니다.
char의 주요 특징
- 메모리 크기: 1바이트 (8비트)
- 값의 범위:
- signed char: -128 ~ 127
- unsigned char: 0 ~ 255
- 용도: 문자 저장 및 처리, 정수형 연산 가능
2. ASCII 코드란?
ASCII(American Standard Code for Information Interchange)는 문자와 숫자를 매핑한 표준 코드입니다. 예를 들어, 대문자 A는 숫자 65에, 소문자 a는 숫자 97에 매핑됩니다.
ASCII 코드의 구조
- 0 ~ 31: 제어 문자 (줄바꿈, 탭 등)
- 32 ~ 47: 공백과 특수 문자 ( , !, @ 등)
- 48 ~ 57: 숫자 0 ~ 9
- 65 ~ 90: 대문자 알파벳 A ~ Z
- 97 ~ 122: 소문자 알파벳 a ~ z
- 127: 삭제(DEL) 문자
반응형
3. ASCII 코드 전체 테이블
아래는 아스키 코드 표입니다. 코딩테스트 등에서 많이 쓰는 코드는 강조표시 했습니다.
10진수 | 16진수 | char형 | 설명 |
0 | 00 | NUL | 널 문자 |
1 | 01 | SOH | 시작 헤더 |
2 | 02 | STX | 시작 텍스트 |
3 | 03 | ETX | 텍스트 끝 |
4 | 04 | EOT | 전송 종료 |
5 | 05 | ENQ | 문의 |
6 | 06 | ACK | 확인 응답 |
7 | 07 | BEL | 벨(비프음) |
8 | 08 | BS | 백스페이스 |
9 | 09 | TAB | 수평 탭 |
10 | 0A | LF | 줄 바꿈 |
11 | 0B | VT | 수직 탭 |
12 | 0C | FF | 폼 피드 |
13 | 0D | CR | 캐리지 리턴 |
14 | 0E | SO | 출력 전환 |
15 | 0F | SI | 입력 전환 |
16 | 10 | DLE | 데이터 링크 탈출 |
17 | 11 | DC1 | 장치 제어 1 (XON) |
18 | 12 | DC2 | 장치 제어 2 |
19 | 13 | DC3 | 장치 제어 3 (XOFF) |
20 | 14 | DC4 | 장치 제어 4 |
21 | 15 | NAK | 부정 확인 응답 |
22 | 16 | SYN | 동기식 대기 |
23 | 17 | ETB | 블록 끝 |
24 | 18 | CAN | 취소 |
25 | 19 | EM | 미디어 끝 |
26 | 1A | SUB | 대체 문자 |
27 | 1B | ESC | 이스케이프 |
28 | 1C | FS | 파일 구분자 |
29 | 1D | GS | 그룹 구분자 |
30 | 1E | RS | 레코드 구분자 |
31 | 1F | US | 유닛 구분자 |
32 | 20 | SPACE | 공백 |
33 | 21 | ! | 느낌표 |
34 | 22 | " | 따옴표 |
35 | 23 | # | 샵 |
36 | 24 | $ | 달러 기호 |
37 | 25 | % | 퍼센트 기호 |
38 | 26 | & | 앤퍼샌드 |
39 | 27 | ' | 홑따옴표 |
40 | 28 | ( | 왼쪽 괄호 |
41 | 29 | ) | 오른쪽 괄호 |
42 | 2A | * | 별표 |
43 | 2B | + | 더하기 기호 |
44 | 2C | , | 쉼표 |
45 | 2D | - | 하이픈 |
46 | 2E | . | 마침표 |
47 | 2F | / | 슬래시 |
48 | 30 | 0 | 숫자 0 |
49 | 31 | 1 | 숫자 1 |
50 | 32 | 2 | 숫자 2 |
51 | 33 | 3 | 숫자 3 |
52 | 34 | 4 | 숫자 4 |
53 | 35 | 5 | 숫자 5 |
54 | 36 | 6 | 숫자 6 |
55 | 37 | 7 | 숫자 7 |
56 | 38 | 8 | 숫자 8 |
57 | 39 | 9 | 숫자 9 |
58 | 3A | : | 콜론 |
59 | 3B | ; | 세미콜론 |
60 | 3C | < | 작음 기호 |
61 | 3D | = | 등호 |
62 | 3E | > | 큼 기호 |
63 | 3F | ? | 물음표 |
64 | 40 | @ | 골뱅이 기호 |
65 | 41 | A | 대문자 A |
66 | 42 | B | 대문자 B |
67 | 43 | C | 대문자 C |
68 | 44 | D | 대문자 D |
69 | 45 | E | 대문자 E |
70 | 46 | F | 대문자 F |
71 | 47 | G | 대문자 G |
72 | 48 | H | 대문자 H |
73 | 49 | I | 대문자 I |
74 | 4A | J | 대문자 J |
75 | 4B | K | 대문자 K |
76 | 4C | L | 대문자 L |
77 | 4D | M | 대문자 M |
78 | 4E | N | 대문자 N |
79 | 4F | O | 대문자 O |
80 | 50 | P | 대문자 P |
81 | 51 | Q | 대문자 Q |
82 | 52 | R | 대문자 R |
83 | 53 | S | 대문자 S |
84 | 54 | T | 대문자 T |
85 | 55 | U | 대문자 U |
86 | 56 | V | 대문자 V |
87 | 57 | W | 대문자 W |
88 | 58 | X | 대문자 X |
89 | 59 | Y | 대문자 Y |
90 | 5A | Z | 대문자 Z |
91 | 5B | [ | 왼쪽 대괄호 |
92 | 5C | \ | 백슬래시 |
93 | 5D | ] | 오른쪽 대괄호 |
94 | 5E | ^ | 캐럿 |
95 | 5F | _ | 밑줄 |
96 | 60 | ` | 그레이브 액센트 |
97 | 61 | a | 소문자 a |
98 | 62 | b | 소문자 b |
99 | 63 | c | 소문자 c |
100 | 64 | d | 소문자 d |
101 | 65 | e | 소문자 e |
102 | 66 | f | 소문자 f |
103 | 67 | g | 소문자 g |
104 | 68 | h | 소문자 h |
105 | 69 | i | 소문자 i |
106 | 6A | j | 소문자 j |
107 | 6B | k | 소문자 k |
108 | 6C | l | 소문자 l |
109 | 6D | m | 소문자 m |
110 | 6E | n | 소문자 n |
111 | 6F | o | 소문자 o |
112 | 70 | p | 소문자 p |
113 | 71 | q | 소문자 q |
114 | 72 | r | 소문자 r |
115 | 73 | s | 소문자 s |
116 | 74 | t | 소문자 t |
117 | 75 | u | 소문자 u |
118 | 76 | v | 소문자 v |
119 | 77 | w | 소문자 w |
120 | 78 | x | 소문자 x |
121 | 79 | y | 소문자 y |
122 | 7A | z | 소문자 z |
123 | 7B | { | 왼쪽 중괄호 |
124 | 7C | | | 수직 바 |
125 | 7D | } | 오른쪽 중괄호 |
126 | 7E | ~ | 틸드 |
127 | 7F | DEL | 삭제 |
4. ASCII 코드와 char의 관계
C언어에서 char는 ASCII 코드와 밀접한 관계를 가집니다. 문자 리터럴은 내부적으로 정수형 ASCII 값으로 변환됩니다.
예제: 문자와 ASCII 값 간 변환
#include <stdio.h>
int main() {
char c = 'A'; // 문자 'A'
printf("문자: %c, ASCII 값: %d\n", c, c);
int ascii = 66; // ASCII 값 66
printf("ASCII 값: %d, 문자: %c\n", ascii, ascii);
return 0;
}
출력결과
문자: A, ASCII 값: 65
ASCII 값: 66, 문자: B
5. char 타입의 활용
char 타입은 단순히 문자를 저장하는 데 그치지 않고, 다양한 작업에서 유용하게 활용됩니다.
5.1 문자 배열과 문자열
C언어에서 문자열은 char 타입의 배열로 표현됩니다. 각 문자에 해당하는 ASCII 코드가 배열에 저장됩니다.
#include <stdio.h>
int main() {
char str[] = "Hello";
for (int i = 0; str[i] != '\0'; i++) {
printf("문자: %c, ASCII 값: %d\n", str[i], str[i]);
}
return 0;
}
출력 결과
문자: H, ASCII 값: 72
문자: e, ASCII 값: 101
문자: l, ASCII 값: 108
문자: l, ASCII 값: 108
문자: o, ASCII 값: 111
5.2 대소문자 변환
대문자를 소문자로, 또는 소문자를 대문자로 변환할 때 ASCII 값을 활용할 수 있습니다.
#include <stdio.h>
int main() {
char upper = 'A'; // 대문자
char lower = upper + 32; // 소문자로 변환
printf("대문자: %c, 소문자: %c\n", upper, lower);
lower = 'z'; // 소문자
upper = lower - 32; // 대문자로 변환
printf("소문자: %c, 대문자: %c\n", lower, upper);
return 0;
}
출력결과
대문자: A, 소문자: a
소문자: z, 대문자: Z
반응형
'C 언어' 카테고리의 다른 글
C언어 매크로(Macro)의 모든 것 - #define, 개념, 동작원리, 성능, 장점, 다양한 예시, 주의사항 (0) | 2024.12.22 |
---|---|
비트연산 - 코딩테스트 시간단축을 위한 마법 (1) | 2024.12.22 |
C언어 비트연산 완벽 정리 - 장점, 원리, 사용 예시, 예제코드 (2) | 2024.12.22 |
C 언어의 모든 데이터 타입: 범위, 메모리 크기, 개념 완벽 정리 (0) | 2024.12.21 |
타입 캐스팅을 활용해서 성능 개선하기 (0) | 2023.08.13 |
댓글