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 |
Przykład deklaracji zmiennej przechowującej pojedyncze znaki:
char znak;
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).
- 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.