Podręcznik

2. Wbudowane typy danych

2.2. Typy znakowe

Typ znakowy char w języku C++ służy do przechowywania pojedynczych znaków. Może być używany do reprezentowania znaków drukowalnych, cyfr, znaków specjalnych i innych znaków w kodzie ASCII lub innym kodowaniu znaków. Typ char umożliwia wykonywanie różnych operacji na znakach oraz jest często wykorzystywany w łańcuchach znakowych i operacjach wejścia/wyjścia. 

W kodzie ASCII (American Standard Code for Information Interchange), każdy znak jest reprezentowany przez odpowiadającą mu wartość numeryczną. 

Na przykład, litera 'A' jest reprezentowana przez wartość 65. Zmienna typu char zajmuje więc dokładnie jeden bajt w pamięci. Kod ASCII zawiera znaki drukowalne oraz znaki specjalne. System ASCII był pierwszym szeroko rozpowszechnionym standardem kodowania. Pojawił się w 1960 za sprawą American National Standards Institute (ANSI). Tablica znaków ASCII to tabela składająca się z 128 znaków (7-bitowy zapis). Poniżej przedstawiona jest tablica ASCI z wartościami kodowanego znaku oraz odpowiadającym wartością w systemie dziesiętnym.

Kod dziesiętny

Znak

Kod dziesiętny

Znak

Kod dziesiętny

Znak

Kod dziesiętny

Znak

0

NUL

32

Space

64

@

96

`

1

SOH

33

!

65

A

97

a

2

STX

34

66

B

98

b

3

ETX

35

#

67

C

99

c

4

EOT

36

$

68

D

100

d

5

ENQ

37

%

69

E

101

e

6

ACK

38

&

70

F

102

f

7

BEL

39

71

G

103

g

8

BS

40

(

72

H

104

h

9

TAB

41

)

73

I

105

i

10

LF

42

*

74

J

106

j

11

VT

43

+

75

K

107

k

12

FF

44

,

76

L

108

l

13

CR

45

77

M

109

m

14

SO

46

.

78

N

110

n

15

SI

47

/

79

O

111

o

16

DLE

48

0

80

P

112

p

17

DC1

49

1

81

Q

113

q

18

DC2

50

2

82

R

114

r

19

DC3

51

3

83

S

115

s

20

DC4

52

4

84

T

116

t

21

NAK

53

5

85

U

117

u

22

SYN

54

6

86

V

118

v

23

ETB

55

7

87

W

119

w

24

CAN

56

8

88

X

120

x

25

EM

57

9

89

Y

121

y

26

SUB

58

:

90

Z

122

z

27

ESC

59

;

91

[

123

{

28

FS

60

<

92

\

124

|

29

GS

61

=

93

]

125

}

30

RS

62

>

94

^

126

~

31

US

63

?

95

_

127

DEL

Wartości kodów ASCII są zazwyczaj wyrażane w systemie dziesiętnym, ale mogą być również przedstawiane w systemie szesnastkowym lub ósemkowym.

Przykład deklaracji zmiennej przechowującej pojedyncze znaki:

char znak;

Pojedynczy znak w kodzie programu można zapisać w apostrofach np. 'A', '!', '9' lub w postaci liczbowej stosując odpowiadającą danemu znakowi liczbę z tablicy ASCII. 
Szybko po wprowadzeniu tablicy ASCII do kodowania znaków okazało się, że niemożliwe jest uwzględnienie wszyskich istniejących znaków. Niemożliwe jest kodowanie np. polskich znaków dialektycznych czy znaków języka chińskiego. W celu udoskonalenia tablica ASCII została rozszerzona do 256 znaków, a więc wprowadzono zapis 8 bitowy. W dlaszym ciągu nie było możliwe uwzględnienie wszystkich znaków specjalnych. Microsoft zaproponował osobne wersje tabel ze znakami dla różnych grup językowych zwane stronami kodowymi (ang. ANSI code page).
Przykłady stron kodowych:
  • ISO 8859-1 (Latin-1): Strona kodowa używana w wielu językach zachodnioeuropejskich, obejmująca znaki diakrytyczne takie jak é, ñ i ü,
  • Windows-1252: Rozszerzenie ISO 8859-1, używane w systemach operacyjnych Windows, zawierające dodatkowe znaki takie jak znaki cudzysłowu typograficznego,
  • UTF-8: Uniwersalna strona kodowa, która jest wstecznie kompatybilna z ASCII i może reprezentować każdy znak Unicode. UTF-8 jest powszechnie używana w Internecie.
Różne strony kodowe mogą powodować problemy z kompatybilnością. Tekst zapisany w jednej stronie kodowej może być nieprawidłowo interpretowany w innej stronie kodowej, prowadząc do nieczytelnych znaków lub "krzaczków". Unicode jest standardem, który został opracowany, aby rozwiązać problemy z różnorodnymi stronami kodowymi. Unicode przypisuje unikalny kod każdemu znakowi z każdego języka, co pozwala na reprezentowanie tekstu w różnych językach za pomocą jednolitego systemu kodowania. UTF-8, UTF-16 i UTF-32 to popularne sposoby kodowania znaków Unicode.