내장형 하드웨어/C언어

문자, 문자열, ASCII code (확장 아스키)

동화다아아 2011. 3. 30. 16:00
 

#include <stdio.h>

int main()

{

        char A;


        A='A';

        printf("%d\n",A); // A의 아스키 코드 번호 출력

        A='z';

        printf("%d\n",A);

        A=' ';

        printf("%d\n",A);

        A='/';

        printf("%d\n",A);

        A='\\';

        printf("%d\n",A);

        A='6';

        printf("%d\n",A);

        A=';';

        printf("%d\n",A);


        return 0;

}

 

→ 여기서 백슬래쉬(\-원화사인)를 작은따옴표 안에 두 번 적은 이유는 \가 뒤의 것을 해석하지 말라는 뜻이 있어 컴퓨터의 입장에서는 A="\";가 A=";로 인식되어 에러가 발생하게 된다. 따라서 A="\\";라고 하면 앞의 \가 뒤의 \의 해석을 막으므로 컴퓨터는 A="\"로 받아들이게 된다.



ASCII CODE (아스키코드) - American standard code for information interchange


정보 교환용 미국 표준 부호. 아스키는 문자, 숫자, 구두점 및 기타 일부 특수 문자에 수치(numeric value)를 부여하는 부호 체계로서, 1962년 미국표준협회(ANSI)가 제정했다. 1967년 국제표준화기구(ISO) 가 ISO 646으로 제정한 7비트 정보 교환용 부호도 이를 준거한 것이다. 각 문자에 사용되는 수치를 표준화함으로써 아스키는 컴퓨터 및 프로그램이 정보를 교환할 수 있게 한다. 아스키는 모두 256개의 부호를 각각 128개로 이루어진 2개의 집합, 즉 표준 집합과 확장 집합으로 구분하여 제공한다. 표준 아스키 부호 집합에서는 각 부호에 7비트를 사용하여 0부터 127(16진수 00H부터 7FH)까지 128개 문자 부호를 제공한다. 확장 아스키 부호 집합에서는 각 부호에 8비트를 사용하여 128부터 255(16진수 80H부터 FFH)까지 128개 문자 부호를 추가로 제공한다. 표준 아스키 부호 집합 128개 중에서 0부터 32까지의 부호는 후진 문자(BS), 나르게 되돌림 문자, 탭 문자와 같은 비인쇄 문자, 즉 컴퓨터와 컴퓨터 간의 정보 전송 또는 컴퓨터와 인쇄기 간의 정보 전송을 제어하는 데 사용되는 제어 문자에 할당되어 있다. 나머지 96개 부호는 로마자의 대문자와 소문자, 0부터 9까지의 숫자 및 널리 사용되는 구두점 등 특수 기호에 할당되어 있다. 그리고 128부터 255까지의 확장 아스키 부호 집합은 컴퓨터 생산자와 소프트웨어 개발자가 여러 가지 다양한 문자에 할당할 수 있도록 하고 있다. 이렇게 할당된 확장 부호는 표준 아스키 부호와 같이 서로 다른 프로그램이나 컴퓨터 사이에서 교환되지 못한다. 예를 들면, IBM은 보통 IBM 확장 문자 집합(IBM Extended Character Set)이라고 불리는 일종의 확장 아스키 부호 집합을 자사의 PC용으로 사용하고, 애플 컴퓨터 회사는 이와 비슷한 다른 확장 아스키 문자 집합을 매킨토시용으로 사용하고 있다. 그러므로 표준 아스키 부호 집합은 마이크로컴퓨터 하드웨어 및 소프트웨어 사이에서 세계적으로 통용되는 데 비해, 확장 아스키 부호 집합은 프로그램이나 컴퓨터 또는 인쇄기가 그것을 해독할 수 있도록 설계되어 있어야만 올바로 해독될 수 있다.


기능에 따라 문자를 구분하자면 크게 두 가지로 분류할 수 있다.

1. 제어문자(Control Character) : 제어문자는 통신, 서식, 특수제어 및 정보 분리 등의 기능을 하는 문자.

2. 그래픽 문자(Graphic Character) : 일반적으로 알고 있는 숫자와 알파벳. (0~9, a~z, A~Z)

10진수

16진수

8진수

2진수

ASCII

10진수

16진수

8진수

2진수

ASCII

0

0×00

000

0000000

NULL

64

0×40

100

1000000

@

1

0×01

001

0000001

SOH

65

0×41

101

1000001

A

2

0×02

002

0000010

STX

66

0×42

102

1000010

B

3

0×03

003

0000011

ETX

67

0×43

103

1000011

C

4

0×04

004

0000100

EOT

68

0×44

104

1000100

D

5

0×05

005

0000101

ENQ

69

0×45

105

1000101

E

6

0×06

006

0000110

ACK

70

0×46

106

1000110

F

7

0×07

007

0000111

BEL

71

0×47

107

1000111

G

8

0×08

010

0001000

BS

72

0×48

110

1001000

H

9

0×09

011

0001001

HT

73

0×49

111

1001001

I

10

0×0A

012

0001010

LF

74

0×4A

112

1001010

J

11

0×0B

013

0001011

VT

75

0×4B

113

1001011

K

12

0×0C

014

0001100

FF

76

0×4C

114

1001100

L

13

0×0D

015

0001101

CR

77

0×4D

115

1001101

M

14

0×0E

016

0001110

SO

78

0×4E

116

1001110

N

15

0×0F

017

0001111

SI

79

0×4F

117

1001111

O

16

0×10

020

0010000

DLE

80

0×50

120

1010000

P

17

0×11

021

0010001

DC1

81

0×51

121

1010001

Q

18

0×12

022

0010010

SC2

82

0×52

122

1010010

R

19

0×13

023

0010011

SC3

83

0×53

123

1010011

S

20

0×14

024

0010100

SC4

84

0×54

124

1010100

T

21

0×15

025

0010101

NAK

85

0×55

125

1010101

U

22

0×16

026

0010110

SYN

86

0×56

126

1010110

V

23

0×17

027

0010111

ETB

87

0×57

127

1010111

W

24

0×18

030

0011000

CAN

88

0×58

130

1011000

X

25

0×19

031

0011001

EM

89

0×59

131

1011001

Y

26

0×1A

032

0011010

SUB

90

0×5A

132

1011010

Z

27

0×1B

033

0011011

ESC

91

0×5B

133

1011011

[

28

0×1C

034

0011100

FS

92

0×5C

134

1011100

\

29

0×1D

035

0011101

GS

93

0×5D

135

1011101

]

30

0×1E

036

0011110

RS

94

0×5E

136

1011110

^

31

0×1F

037

0011111

US

95

0×5F

137

1011111

_

32

0×20

040

0100000

SP

96

0×60

140

1100000

.

33

0×21

041

0100001

!

97

0×61

141

1100001

a

34

0×22

042

0100010

"

98

0×62

142

1100010

b

35

0×23

043

0100011

#

99

0×63

143

1100011

c

36

0×24

044

0100100

$

100

0×64

144

1100100

d

37

0×25

045

0100101

%

101

0×65

145

1100101

e

38

0×26

046

0100110

&

102

0×66

146

1100110

f

39

0×27

047

0100111

'

103

0×67

147

1100111

g

40

0×28

050

0101000

(

104

0×68

150

1101000

h

41

0×29

051

0101001

)

105

0×69

151

1101001

i

42

0×2A

052

0101010

*

106

0×6A

152

1101010

j

43

0×2B

053

0101011

+

107

0×6B

153

1101011

k

44

0×2C

054

0101100

'

108

0×6C

154

1101100

l

45

0×2D

055

0101101

-

109

0×6D

155

1101101

m

46

0×2E

056

0101110

.

110

0×6E

156

1101110

n

47

0×2F

057

0101111

/

111

0×6F

157

1101111

o

48

0×30

060

0110000

0

112

0×70

160

1110000

p

49

0×31

061

0110001

1

113

0×71

161

1110001

q

50

0×32

062

0110010

2

114

0×72

162

1110010

r

51

0×33

063

0110011

3

115

0×73

163

1110011

s

52

0×34

064

0110100

4

116

0×74

164

1110100

t

53

0×35

065

0110101

5

117

0×75

165

1110101

u

54

0×36

066

0110110

6

118

0×76

166

1110110

v

55

0×37

067

0110111

7

119

0×77

167

1110111

w

56

0×38

070

0111000

8

120

0×78

170

1111000

x

57

0×39

071

0111001

9

121

0×79

171

1111001

y

58

0×3A

072

0111010

:

122

0×7A

172

1111010

z

59

0×3B

073

0111011

;

123

0×7B

173

1111011

{

60

0×3C

074

0111100

<

124

0×7C

174

1111100

|

61

0×3D

075

0111101

=

125

0×7D

175

1111101

}

62

0×3E

076

0111110

>

126

0×7E

176

1111110

~

63

0×3F

077

0111111

?

127

0×7F

177

1111111

DEL


확장형

 

- 아스키코드에는 영문과 숫자만을 넣을 수 있는 한계가 있기에, 유니코드를 만들어서 한글, 일어, 한자 등을 넣을 수 있도록 했다. 아스키코드는 1byte(8bit->2의8제곱=256)지만 유니코드는 2byte(16bit->2의 16제곱=65536)를 차지한다.


ex)

#include<stdio.h>

int main()

{

        printf("%c%c%c%c%c\n",72,101,108,108,111);

        return 0;

}


//문자열을 화면에 출력하는 프로그램


#include <stdio.h>

int main()

{

        char word[30]; //문자열의 배열 선언

        short A[30];

        int B[30];

        

        

        printf("Please enter anything: ");

        scanf("%s", word);

        printf("%s, this is what you type.\n", word);

        printf("%d\n",sizeof(word));

        printf("%d\n",sizeof(A));

        printf("%d\n",sizeof(B));


        return 0;

}


→ scanf("%s", word);// %s는 string(문자열)의 뜻이며 문자열의 경우는 %s가 저장되는 변수 word 앞에 &가 생략되었다.(문자열을 제외하면 반드시 &를 넣어야 한다.)

→ char word[30] 배열은 30byte의 메모리를 차지하고

   short A[30] 배열은 60byte의 메모리를 차지하며

   int B[30] 배열은 120byte의 메모리를 차지한다.       


[참고]

ASCII CODE (http://blog.naver.com/vletzrockv?Redirect=Log&logNo=130010010849)

ASCII 표 (http://www.jasko.co.kr/lesson/ascii.html)

확장형 ASCII 표 (http://blog.naver.com/leons78?Redirect=Log&logNo=130001992806)