3. 문자 코드
1) 문자 인코딩의 기본 개념
1-1) 아스키 코드 (ASCII, American Standard Code for Information Interchange)
- 아스키 코드는 미국 ANSI(American National Standards Institute)에서 제정한 문자 인코딩 표준이다.
- 컴퓨터는 숫자만 이해할 수 있으므로, 문자를 숫자로 표현하는 방식이 필요하다. 아스키 코드는 바로 이 목적을 위해 사용된다.
- 모든 문자를 고유한 숫자 값으로 매핑하여, 사람이 입력한 문자 → 컴퓨터가 이해할 수 있는 숫자로 변환한다.
⭕ 주요 연도별 변화
1️⃣ 1967년: 최초로 128개 문자(숫자, 알파벳, 기호 등)를 정의한 아스키 표준이 만들어졌다.
2️⃣ 1986년: 여기에 선 그리기 문자, 그래픽 문자 등을 포함한 확장 아스키 코드(256개)가 제정되었다.
⚠️ 그러나 C 언어에서는 기본 아스키 코드 128개만 사용한다.
⛏️ 이유: C 언어는 시스템 프로그래밍 언어로, 하드웨어와의 효율적인 통신을 위해 단순하고 범용적인 문자 세트를 사용한다.
2) 아스키 코드의 특징과 메모리 구조
- 아스키 코드는 부호를 사용하지 않는다.
즉, 0~127까지의 양의 정수만 사용한다. - 하나의 문자는 항상 1바이트(8비트) 공간에 저장된다.
⭕ 하지만 실제 사용되는 값은 0~127이므로, 상위 1비트는 사용되지 않는다. - 문자와 숫자는 서로 암호처럼 매칭된다.
예를 들어, A는 65, a는 97, 0은 48이다. - 문자 자료형(char)은 내부적으로 숫자로 처리된다.
✅ 문자 출력 시 %c 서식 지정자를 사용하면, 해당 숫자에 매핑된 문자가 출력된다.
✅ 반대로 %d 또는 %d를 쓰면, 문자에 해당하는 숫자(아스키 값)가 출력된다.
3) 아스키 코드 표 (0~127)
| 10진수 | 16진수 | 문자 | 10진수 | 16진수 | 문자 |
| 0 | 0x00 | NUL | 64 | 0x40 | @ |
| 1 | 0x01 | SOH | 65 | 0x41 | A |
| 2 | 0x02 | STX | 66 | 0x42 | B |
| 3 | 0x03 | ETX | 67 | 0x43 | C |
| 4 | 0x04 | EOT | 68 | 0x44 | D |
| 5 | 0x05 | ENQ | 69 | 0x45 | E |
| 6 | 0x06 | ACK | 70 | 0x46 | F |
| 7 | 0x07 | BEL | 71 | 0x47 | G |
| 8 | 0x08 | BS | 72 | 0x48 | H |
| 9 | 0x09 | TAB | 73 | 0x49 | I |
| 10 | 0x0A | LF | 74 | 0x4A | J |
| 11 | 0x0B | VT | 75 | 0x4B | K |
| 12 | 0x0C | FF | 76 | 0x4C | L |
| 13 | 0x0D | CR | 77 | 0x4D | M |
| 14 | 0x0E | SO | 78 | 0x4E | N |
| 15 | 0x0F | SI | 79 | 0x4F | O |
| 16 | 0x10 | DLE | 80 | 0x50 | P |
| 17 | 0x11 | DC1 | 81 | 0x51 | Q |
| 18 | 0x12 | DC2 | 82 | 0x52 | R |
| 19 | 0x13 | DC3 | 83 | 0x53 | S |
| 20 | 0x14 | DC4 | 84 | 0x54 | T |
| 21 | 0x15 | NAK | 85 | 0x55 | U |
| 22 | 0x16 | SYN | 86 | 0x56 | V |
| 23 | 0x17 | ETB | 87 | 0x57 | W |
| 24 | 0x18 | CAN | 88 | 0x58 | X |
| 25 | 0x19 | EM | 89 | 0x59 | Y |
| 26 | 0x1A | SUB | 90 | 0x5A | Z |
| 27 | 0x1B | ESC | 91 | 0x5B | [ |
| 28 | 0x1C | FS | 92 | 0x5C | \ |
| 29 | 0x1D | GS | 93 | 0x5D | ] |
| 30 | 0x1E | RS | 94 | 0x5E | ^ |
| 31 | 0x1F | US | 95 | 0x5F | _ |
| 32 | 0x20 | (공백) | 96 | 0x60 | ` |
| 33 | 0x21 | ! | 97 | 0x61 | a |
| 34 | 0x22 | " | 98 | 0x62 | b |
| 35 | 0x23 | # | 99 | 0x63 | c |
| 36 | 0x24 | $ | 100 | 0x64 | d |
| 37 | 0x25 | % | 101 | 0x65 | e |
| 38 | 0x26 | & | 102 | 0x66 | f |
| 39 | 0x27 | ' | 103 | 0x67 | g |
| 40 | 0x28 | ( | 104 | 0x68 | h |
| 41 | 0x29 | ) | 105 | 0x69 | i |
| 42 | 0x2A | * | 106 | 0x6A | j |
| 43 | 0x2B | + | 107 | 0x6B | k |
| 44 | 0x2C | , | 108 | 0x6C | l |
| 45 | 0x2D | - | 109 | 0x6D | m |
| 46 | 0x2E | . | 110 | 0x6E | n |
| 47 | 0x2F | / | 111 | 0x6F | o |
| 48 | 0x30 | 0 | 112 | 0x70 | p |
| 49 | 0x31 | 1 | 113 | 0x71 | q |
| 50 | 0x32 | 2 | 114 | 0x72 | r |
| 51 | 0x33 | 3 | 115 | 0x73 | s |
| 52 | 0x34 | 4 | 116 | 0x74 | t |
| 53 | 0x35 | 5 | 117 | 0x75 | u |
| 54 | 0x36 | 6 | 118 | 0x76 | v |
| 55 | 0x37 | 7 | 119 | 0x77 | w |
| 56 | 0x38 | 8 | 120 | 0x78 | x |
| 57 | 0x39 | 9 | 121 | 0x79 | y |
| 58 | 0x3A | : | 122 | 0x7A | z |
| 59 | 0x3B | ; | 123 | 0x7B | { |
| 60 | 0x3C | < | 124 | 0x7C | | |
| 61 | 0x3D | = | 125 | 0x7D | } |
| 62 | 0x3E | > | 126 | 0x7E | ~ |
| 63 | 0x3F | ? | 127 | 0x7F | DEL |
✅ 마무리 정리
1️⃣ 아스키 코드는 문자와 숫자를 매핑하는 문자 인코딩 방식이다.
2️⃣ C 언어에서는 128개의 기본 아스키 코드만 사용한다.
3️⃣ 아스키 코드는 1바이트(8비트)로 구성되며, 부호 없는 정수이다.
4️⃣ 문자 출력에는 %c, 아스키 코드 출력에는 %d 서식 지정자를 사용한다.
💻 예제 코드
#include <stdio.h>
int main() {
// 아스키 코드 65와 97을 대응하는 문자로 출력
printf("65에 해당하는 문자는: %c\n", 65); // A 출력
printf("97에 해당하는 문자는: %c\n", 97); // a 출력
return 0;
}
🖥️ 출력 결과
65에 해당하는 문자는: A
97에 해당하는 문자는: a
✳️ 추가 팁
- %d를 사용하여 문자에 대응하는 숫자 출력도 가능하다.
char ch = 'A';
printf("문자 A의 아스키 값은: %d\n", ch); // 65 출력
'Language > C' 카테고리의 다른 글
| 📌 Chapter 04 - 변수와 자료형 - 자료형 (0) | 2025.05.17 |
|---|---|
| 📌 Chapter 04 - 변수와 자료형 - 변수의 기초 (0) | 2025.05.17 |
| 📌 Chapter 03 - 표준 입출력 함수 - 표준 입력 함수 (0) | 2025.05.16 |
| 📌 Chapter 03 - 표준 입출력 함수 - 표준 출력 함수 (0) | 2025.05.16 |
| 📌 Chapter 02 - C 언어 작성 및 실행 (0) | 2025.05.15 |