티스토리 뷰

반응형

Table of Contents


개요

char

아스키 코드

아스키 코드 표




1. 개요


 프로그래밍에서는 숫자 뿐만 아니라 문자도 다뤄야 하기 때문에 문자를 위한 변수형으로 character 의 약자인 char가 존재합니다. 서식문자는 %c 로서, 이 서식문자로 입력 및 출력을 할 수 있습니다.


1
2
3
4
5
6
7
8
//code by RiKang, weeklyps.com
#include <stdio.h>
int main(void) {
    char a;
    scanf("%c",&a);
    printf("%c",a);
    return 0;
}
cs

 

 만일 C언어에서 문자 a 를 그냥 a 로 표기한다면 이게 변수 a를 말하는 것인지, 문자 a를 말하는 것인지 알 수 없겠지요.

 예를 들어 변수 a에 문자 a를 넣고 싶을 때, a = a; 라는 구문을 쓴다면,

 a라는 변수에 a 변수의 값을 넣게 되니 아무 일도 일어나지 않을 것입니다.


 따라서 문자는 아래와 같이 '문자' 의 형식으로 표기하도록 되어 있습니다. 작은 따옴표안에 문자를 쓰는 형식입니다.


1
2
3
4
5
6
7
8
9
10
11
//code by RiKang, weeklyps.com
#include <stdio.h>
 
int main(void) {
    char a;
    a = 'a';
    printf("%c\n",a);
    a = 'e';
    printf("%c",a);
    return 0;
}
cs




2. char


 char는 문자를 담기 위해 만들어진 변수형이지만, 그 실체는 정수형 변수입니다. 컴퓨터는 문자도 0과 1로 저장하고 처리를 할 수 밖에 없기 때문에 'a'같은 문자도 결국 숫자로 변형하여 저장하는 것입니다. 아래와 같은 프로그램을 실행시켜 보면 그 사실을 확인해 볼 수 있습니다.


1
2
3
4
5
6
7
8
//code by RiKang, weeklyps.com
#include <stdio.h>
int main(void) {
    char a;
    a = 'e';
    printf("숫자 : %d, 문자 : %c",a,a);
    return 0;
}
cs


 위 예시를 돌려보면, '숫자 : 101, 문자 : e' 라는 출력이 나옵니다. 변수 a에는 사실 101을 이진수로 표현한 값이 저장되어 있으며, %d 로 출력할 땐 십진수로 101을 출력하고, %c로 출력할 땐 문자로 'e' 를 출력할 뿐입니다. char은 결국 1 byte의 저장 용량을 가지는 정수형 변수입니다. 




3. 아스키 코드


 char 은 정수형태로 문자를 저장하기 때문에 어떤 숫자가 어떤 문자를 표현하는 지에 대한 약속이 필요합니다.


1
2
3
4
5
6
7
8
//code by RiKang, weeklyps.com
#include <stdio.h>
int main(void) {
    char a;
    a = 98;
    printf("숫자 : %d, 문자 : %c",a,a);
    return 0;
}
cs


 C언어에는 '98이 저장되어 있으면 b를 나타내는 것이다.' 라는 약속이 있기 때문에, 위와 같이 프로그램을 돌려보면 문자에 b가 출력 됨을 알 수 있습니다. C언어는 이 약속을 아스키 코드에 따라 정하였습니다. 아스키 코드란, 미국 표준 학회(ASA)에서 정한 기준으로 7 bit의 숫자와 문자들을 서로 일대일로 매칭시켜 놓은 것입니다. 그 안에는 0,1,2 같은 십진수에 사용하는 숫자들도 문자의 일종으로 포함되어 있습니다. 우선 아스키 코드의 이해를 위해 아래의 프로그램을 돌려 보도록 하겠습니다.


1
2
3
4
5
6
7
8
9
10
11
//code by RiKang, weeklyps.com
#include <stdio.h>
int main(void) {
    char a;
    a = 0;
    // 아스키코드에서 0은 '없음'을 뜻하는 null에 매칭되어 있으며, 따라서 아무것도 출력하지 않는다.
    printf("숫자 : %d, 문자 : %c\n",a,a);
    a = '0';
    printf("숫자 : %d, 문자 : %c",a,a);
    return 0;
}
cs


 아스키 코드에서 48이 '0'을 뜻하기 때문에 숫자 0 과 문자 '0'은 다름을 알 수 있습니다. 숫자 0 - 문자 null, 숫자 48 - 문자 '0' 의 매칭이기 때문이지요.


 추가로, char은 정수형 변수이기 때문에 가지는 특성으로 사칙연산이 가능하다는 점도 있습니다. 아스키코드로 'a'는 97, 'b'는 98, 'd' 는 100 이기 때문에 아래의 프로그램을 돌려 보면 b와 d가 출력됩니다.


1
2
3
4
5
6
7
8
9
10
11
//code by RiKang, weeklyps.com
#include <stdio.h>
 
int main(void){
    char a='a';
    a++// 'a'+1 -> 97+1 -> 98 -> 'b'가 된다.
    printf("%c\n",a);
    a+=2// 'b'+2 -> 98+2 -> 100 -> 'd'가 된다.
    printf("%c\n",a);
    return 0;
}
cs


 이를 활용하는 대표적인 경우로, 대문자에서 소문자로 변경하고 싶을 경우 변수이름+='a'-'A'; 와 같이 변경하는 경우가 있습니다. 알파벳은 순서대로 저장되어 있기 때문에 'B'+'a'-'A' => 1+'A'+'a'-'A' => 1+ 'a' => 'b' 로 대소문자 변경이 가능합니다. 아래의 표를 통해 어떤 숫자와 어떤 문자가 매칭되어 있는 지 알 수 있습니다.




4. 아스키 코드 표


10진수

문자

10진수

문자

0

NULL

64

@

1

SOH

65

A

2

STX

66

B

3

ETX

67

C

4

EOT

68

D

5

ENQ

69

E

6

ACK

70

F

7

BEL

71

G

8

BS

72

H

9

HT

73

I

10

LF

74

J

11

VT

75

K

12

FF

76

L

13

CR

77

M

14

SO

78

N

15

SI

79

O

16

DLE

80

P

17

DC1

81

Q

18

SC2

82

R

19

SC3

83

S

20

SC4

84

T

21

NAK

85

U

22

SYN

86

V

23

ETB

87

W

24

CAN

88

X

25

EM

89

Y

26

SUB

90

Z

27

ESC

91

[

28

FS

92

\

29

GS

93

]

30

RS

94

^

31

US

95

_

32

SP

96

.

33

!

97

a

34

"

98

b

35

#

99

c

36

$

100

d

37

%

101

e

38

&

102

f

39

'

103

g

40

(

104

h

41

)

105

i

42

*

106

j

43

+

107

k

44

'

108

l

45

-

109

m

46

.

110

n

47

/

111

o

48

0

112

p

49

1

113

q

50

2

114

r

51

3

115

s

52

4

116

t

53

5

117

u

54

6

118

v

55

7

119

w

56

8

120

x

57

9

121

y

58

:

122

z

59

;

123

{

60

<

124

|

61

=

125

}

62

>

126

~

63

?

127

DEL




반응형