Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek |
Kod | NBC |
0 | 0000000 |
1 | 0000001 |
2 | 0000010 |
... | ... |
125 | 1111101 |
126 | 1111110 |
127 | 1111111 |
Jeśli kody ASCII zinterpretujemy jako liczby w kodzie NBC, to przyjmą one wartości od 0 do 127. Co nam to daje? Otóż bardzo wiele: komputery są maszynami matematycznymi, które potrafią przetwarzać liczby. Ponieważ kody ASCII są liczbami, to mogą być przetwarzane przez komputery jak inne liczby. Co więcej, liczby mogą być zapamiętywane w pamięci komputerowej, zatem komputer będzie mógł przechowywać znaki kodu ASCII w swojej pamięci.
Kod ASCII jest 7-bitowy, a komórka pamięci komputera jest 8-bitowa. Wynika z tego, iż jeden bit będzie niewykorzystywany:
NBC | binarnie |
0 | 00000000 |
1 | 00000001 |
2 | 00000010 |
... | ... |
125 | 01111101 |
126 | 01111110 |
127 | 01111111 |
Początkowo nie miało to znaczenia, jednak później wraz z rozwojem komputerów postanowiono rozszerzyć standard ASCII do 8-bitów. W ten sposób otrzymano dodatkowe 128 kodów i powstał tzw. rozszerzony standard ASCII:
U2 | NBC | binarnie |
0 | 0 | 00000000 |
1 | 1 | 00000001 |
2 | 2 | 00000010 |
... | ... | ... |
125 | 125 | 01111101 |
126 | 126 | 01111110 |
127 | 127 | 01111111 |
-128 | 128 | 10000000 |
-127 | 129 | 10000001 |
... | ... | ... |
-3 | 253 | 11111101 |
-2 | 254 | 11111110 |
-1 | 255 | 11111111 |
W efekcie kod ASCII otrzymał 28 = 256 słówek kodowych: 128 słówek standardowego kodu ASCII (kody NBS od 0 do 127) oraz drugie 128 słówek rozszerzonego kodu ASCII (kody NBS od 128 do 255 lub kody U2 od -1 do -128). Kody rozszerzone zostały wykorzystane do zakodowania dodatkowych znaków (np. znaki narodowe, litery greckie, symbole matematyczne, znaki do tworzenia tabelek oraz inne). Kody ASCII można również interpretować jako liczby ze znakiem U2. W takim przypadku kody podstawowe są dodatnie, a kody rozszerzone są ujemne (dlaczego?).
W języku C++ kod ASCII jest reprezentowany przez typ char (ang. character = znak). W pamięci komputera zmienna typu char zajmuje 1 bajt (8 bitów). Uruchom poniższy program:
// Znaki ASCII //------------ #include <iostream> using namespace std; int main() { cout << "char: " << sizeof(char) << "B" << endl << endl; return 0; } |
char: 1B |
Zmienna typu char przechowuje jeden znak ASCII.
// Znaki ASCII //------------ #include <iostream> using namespace std; int main() { char a; a = 'A'; cout << a << endl << endl; return 0; } |
A |
Zwróć uwagę, iż w powyższym programie wpisaliśmy znak A do zmiennej a w apostrofach, a nie w cudzysłowach. Apostrofy oznaczają tutaj kod literki umieszczonej w nich. Cudzysłowy omówimy w dalszej części lekcji. Kod ten trafia do zmiennej a. Następnie wyświetlamy zawartość zmiennej. Ponieważ zmienna a ma typ char, to strumień cout interpretuje ją jako znak i wyświetla literę A. Gdybyśmy chcieli otrzymać kod tej literki (czyli liczbę), to stosujemy rzutowanie:
// Znaki ASCII //------------ #include <iostream> using namespace std; int main() { char a; a = 'A'; cout << (int) a << endl << endl; return 0; } |
65 |
unsigned char – kody znaków interpretowane jako liczby NBS od 0 do 255. Kody podstawowe od 0 - 127, kody rozszerzone od 128 - 255
signed char – kody znaków interpretowane jako liczby U2 od -128 do 127. Kody podstawowe od 0 -127, kody rozszerzone od -1 do -128.
Jeśli zastosujemy sam typ char, to kody znaków będą interpretowane jako NBS lub U2 w zależności od ustawień kompilatora. Uruchom poniższy program:
// Znaki ASCII //------------ #include <iostream> using namespace std; int main() { unsigned char a = 'ą'; // NBC signed char b = 'ą'; // U2 char c = 'ą'; // NBC lub U2 cout << "unsigned char: kod 'ą' = " << (int) a << endl << "signed char: kod 'ą' = " << (int) b << endl << " char: kod 'ą' = " << (int) c << endl << endl; return 0; } |
unsigned char: kod 'ą' = 185 signed char: kod 'ą' = -71 char: kod 'ą' = -71 |
Program wyświetla kod literki ą w zależności od rodzaju typu char. Literka ta należy do kodów rozszerzonych ASCII, dlatego przy interpretacji U2 otrzymujemy kod ujemny. Dodatkowo dostajesz informację o interpretacji typu char w twoim kompilatorze. Zapamiętaj ten wynik. Na przyszłość, jeśli kody rozszerzone ASCII będą istotne, to należy jawnie zastosować odpowiedni typ unsigned char (NBS) lub signed char (U2).
Bitowo | |||||||
b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
0 | 0 | 0 | x | x | x | x | x |
Kody 0...31 posiadają specjalne znaczenie. Stosowano je dawniej do sterowania zewnętrznymi drukarkami. Dzisiaj z tych kodów wciąż używane są:
// Znak NUL //------------ #include <iostream> using namespace std; int main() { cout << "ABC\0abcdefghijkl"; << "1234" << endl; return 0; } |
ABC1234 |
Program wyświetla dwa łańcuchy tekstowe: "ABC\0abcdefghijkl" oraz "1234". W pierwszym łańcuchu za literami ABC został wstawiony znak NUL - robi się to przy pomocy znaku pomocniczego \, za którym umieszczamy kod znaku zapisany w systemie ósemkowym. U nas \0 oznacza kod 0, czyli znak NUL. Gdy strumień cout napotka w tekście kod NUL, to przyjmuje, że tekst się w tym miejscu zakończył i dalsze znaki nie zostaną już wyświetlone. Dlatego drugi tekst został wyświetlony za literami ABC.
Kod 7: 00000111 – BEL, dzwonek. Znak generuje krótki sygnał dźwiękowy, dawniej drukarka po otrzymaniu kodu BEL uruchamiała dzwonek, aby zwrócić na coś uwagę operatora.
// Znak BEL //------------ #include <iostream> using namespace std; int main() { cout << "\7" << endl; return 0; } |
// Znak BEL //------------ #include <iostream> using namespace std; int main() { cout << "\a" << endl; return 0; } |
W tekście umieszczamy kod ósemkowy \7 lub symbolicznie \a.
Kod 8: 00001000 – BS, backspace, cofnięcie pozycji wydruku o jeden znak wstecz.
// Znak BS - back space //--------------------- #include <iostream> using namespace std; int main() { cout << "ALO\10A" << endl; return 0; } |
// Znak BS - back space //--------------------- #include <iostream> using namespace std; int main() { cout << "ALO\bA" << endl; return 0; } |
ALA |
W tekście za literą O wstawiliśmy znak BS. Przy wydruku spowoduje to nadpisanie litery O literą A (ponieważ pozycja wydruku została cofnięta o jeden znak w lewo, czyli na pozycję litery O) i zamiast ALO otrzymamy ALA. Znak BS uzyskujemy przy pomocy kodu ósemkowego \10 lub symbolicznie \b.
Kod 9: 00001001 – HT, horizontal tab, ustawienie wydruku na pozycji następnej tabulacji. Tabulacje rozmieszczone są w wierszu w tych samych kolumnach co osiem znaków.
// Znak HT - horizontal tab //------------------------- #include <iostream> using namespace std; int main() { cout << "A\11B\tC\11D" << endl << "ABC\tDEF\tGHI\tJKL" << endl << "ABCDEF\11GHIJKL\tMNOPQR\11STUVWX" << endl << endl; return 0; } |
A B
C D ABC DEF GHI JKL ABCDEF GHIJKL MNOPQR STUVWX |
Znak HT uzyskujemy kodem ósemkowym \11 lub symbolicznie \t.
Kod 10: 00001010 – LF, line feed, dawniej znak ten powodował na drukarce przesunięcie pionowe papieru o jeden wiersz, co umożliwiało rozpoczęcie druku następnego. Dzisiaj zwykle oznacza on przesunięcie pozycji wydruku na początek nowego wiersza. W C ++ oznacza to samo, co manipulator endl.
// Znak LF - line feed //-------------------- #include <iostream> using namespace std; int main() { cout << "ABC\12DEF\nGHI" << endl << endl; return 0; } |
ABC DEF GHI |
Znak LF uzyskujemy kodem ósemkowym \12 lub symbolicznie \n.
Kod 13: 00001101 – CR, carriage return, znak powoduje powrót pozycji wydruku na początek wiersza. Dawniej znak był stosowany wraz z LF, co powodowało wysunięcie papieru o jeden wiersz i ustawienie głowicy drukującej na początku nowego wiersza.
// Znak CR - carriage return //-------------------------- #include <iostream> using namespace std; int main() { cout << "ABCDEF\15GHI\rJK" << endl << endl; return 0; } |
JKIDEF |
Program wypisuje w tym samym wierszu trzy teksty, ponieważ przed dwoma ostatnimi wstawiono kod CR, to wynikiem jest jeden tekst z nadpisanymi znakami. Znak CR uzyskujemy kodem ósemkowym \15 lub symbolicznie \r.
Pozostałe znaki w konsoli powodują wyświetlenie znaków graficznych, które czasem mogą być przydatne. Poniższy program wyświetla wszystkie znaki kontrolne ASCII:
// Znaki kontrolne ASCII //---------------------- #include <iostream> #include <iomanip> using namespace std; int main() { for(int i = 0; i < 32; i++) { cout << "kod: " << setw(2) << i << " Znak: "; switch(i) { case 0: cout << "NUL"; break; case 7: cout << "BEL"; break; case 8: cout << "BS"; break; case 9: cout << "HT"; break; case 10: cout << "LF"; break; case 13: cout << "CR"; break; default: cout << char(i); break; } cout << endl; } cout << endl; return 0; } |
kod: 0 Znak: NUL kod: 1 Znak: ☺ kod: 2 Znak: ☻ kod: 3 Znak: ♥ kod: 4 Znak: ♦ kod: 5 Znak: ♣ kod: 6 Znak: ♠ kod: 7 Znak: BEL kod: 8 Znak: BS kod: 9 Znak: HT kod: 10 Znak: LF kod: 11 Znak: ♂ kod: 12 Znak: ♀ kod: 13 Znak: CR kod: 14 Znak: ♫ kod: 15 Znak: ☼ kod: 16 Znak: ► kod: 17 Znak: ◄ kod: 18 Znak: ↕ kod: 19 Znak: ‼ kod: 20 Znak: ¶ kod: 21 Znak: § kod: 22 Znak: ▬ kod: 23 Znak: ↨ kod: 24 Znak: ↑ kod: 25 Znak: ↓ kod: 26 Znak: → kod: 27 Znak: ← kod: 28 Znak: ∟ kod: 29 Znak: ↔ kod: 30 Znak: ▲ kod: 31 Znak: ▼ |
W programie użyliśmy nowej instrukcji switch, która przydaje się, gdy należy podjąć różne działania w zależności od wartości wybranego wyrażenia. Składnia jest następująca:
switch(wyrażenie) { case stała_1: instrukcje; case stała_2: instrukcje; ... default: instrukcje; }
Działanie instrukcji:
Komputer oblicza wartość wyrażenia. Jeśli jedna ze stałych za case ma wartość równą wartości wyrażenia, to komputer wykonuje instrukcje zawarte w tej sekcji case. Jeśli ostatnią z tych instrukcji jest break, to komputer kończy wykonanie switch. Jeśli nie ma instrukcji break, to następuje przejście do instrukcji w kolejnej sekcji case (czasem jest to pożądane, gdy chcemy wykonać te same operacje dla kilku wartości wyrażenia). Jeśli wartość wyrażenia nie odpowiada żadnej ze stałych za case, to komputer wykona instrukcje w sekcji default:. Przyjrzyjmy się, jak to działa w naszym programie:
for(int i = 0; i < 32; i++) { |
Rozpoczynamy pętlę, która wykona 32 obiegi z wartościami i od 0 do 31. Wartości te odpowiadają kodom sterującym ASCII. | |
cout << "kod: " << setw(2) << i << " Znak: "; |
Wyświetlamy wartość kodu znaku sterującego. | |
switch(i) |
Rozpoczynamy instrukcję switch. Sprawdzany w niej będzie kod wyświetlanego znaku. | |
{ case 0: cout << "NUL"; break; case 7: cout << "BEL"; break; case 8: cout << "BS"; break; case 9: cout << "HT"; break; case 10: cout << "LF"; break; case 13: cout << "CR"; break; |
Ponieważ niektóre kody sterujące wykonują działania w oknie konsoli i nie są znakami drukowalnymi, musimy je wyłapać. To właśnie robi tutaj instrukcja switch. Jeśli kod znaku jest równy jednej ze stałych za case, to do strumienia cout trafi nazwa kodu, a nie znak sterujący, który by zaburzył wyświetlaną treść. Zwróć uwagę, iż po przesłaniu do strumienia nazwy kodu pojawia się instrukcja break, która kończy działanie switch. Bez niej komputer przeszedłby do wykonywania instrukcji w następnym bloku case. | |
default: cout << char(i); break; } |
Jeśli kod znaku nie jest równy żadnej ze stałych za case, to nastąpi wykonanie instrukcji w sekcji default:. W tym wypadku kod sterujący nie wykonuje działania i jest normalnym znakiem, który przekazujemy do strumienia cout. Musimy wykonać rzutowanie na typ char, aby strumień zinterpretował wartość zmiennej i jako znak, a nie liczbę. | |
cout << endl; } |
Po wyjściu z instrukcji switch przesyłamy do strumienia manipulator endl, aby zakończyć bieżący wiersz |
// Znaki pisarskie i cyfry //------------------------ #include <iostream> #include <iomanip> using namespace std; int main() { for(int i = 32; i < 64; i++) { cout << "kod: " << setw(2) << i << " Znak: "; if(i == 32) cout << "SP"; else cout << char(i); cout << endl; } cout << endl; return 0; } |
kod: 32 Znak: SP kod: 33 Znak: ! kod: 34 Znak: " kod: 35 Znak: # kod: 36 Znak: $ kod: 37 Znak: % kod: 38 Znak: & kod: 39 Znak: ' kod: 40 Znak: ( kod: 41 Znak: ) kod: 42 Znak: * kod: 43 Znak: + kod: 44 Znak: , kod: 45 Znak: - kod: 46 Znak: . kod: 47 Znak: / kod: 48 Znak: 0 kod: 49 Znak: 1 kod: 50 Znak: 2 kod: 51 Znak: 3 kod: 52 Znak: 4 kod: 53 Znak: 5 kod: 54 Znak: 6 kod: 55 Znak: 7 kod: 56 Znak: 8 kod: 57 Znak: 9 kod: 58 Znak: : kod: 59 Znak: ; kod: 60 Znak: < kod: 61 Znak: = kod: 62 Znak: > kod: 63 Znak: ? |
W skład tej sekcji wchodzą znaki cyfr, których używamy do zapisu liczb. Poniższy program wyświetla kody cyfr szesnastkowo, ósemkowo i dziesiętnie:
// Znaki cyfr //----------- #include <iostream> #include <iomanip> using namespace std; int main() { for(int i = 48; i < 58; i++) cout << "Cyfra " << char(i) << " : " << hex << "0x" << i << " : " << oct << "0" << i << " : " << dec << i << endl; cout << endl; return 0; } |
Cyfra 0 : 0x30 : 060 : 48 Cyfra 1 : 0x31 : 061 : 49 Cyfra 2 : 0x32 : 062 : 50 Cyfra 3 : 0x33 : 063 : 51 Cyfra 4 : 0x34 : 064 : 52 Cyfra 5 : 0x35 : 065 : 53 Cyfra 6 : 0x36 : 066 : 54 Cyfra 7 : 0x37 : 067 : 55 Cyfra 8 : 0x38 : 070 : 56 Cyfra 9 : 0x39 : 071 : 57 |
Manipulatory hex (szesnastkowo), oct (ósemkowo) i dec (dziesiętnie) ustawiają sposób wyświetlania liczb w strumieniu cout. Dzięki nim nie musimy przeliczać wartości. Kody dwójkowe cyfr są następujące:
Cyfra | Kod cyfry |
0 | 00110000 |
1 | 00110001 |
2 | 00110010 |
3 | 00110011 |
4 | 00110100 |
5 | 00110101 |
6 | 00110110 |
7 | 00110111 |
8 | 00111000 |
9 | 00111001 |
Zwróć uwagę, iż kody ASCII cyfr łatwo przerobić na wartości cyfr – wystarczy w kodzie ASCII wyzerować pierwsze cztery bity. Arytmetycznie odpowiada to odjęciu od kodu ASCII cyfry liczby 48 (001100002 = 4810). Również przetworzenie wartości cyfry na jej kod ASCII odpowiada dodaniu do jej wartości liczby 48:
Wartość cyfry = kod ASCII cyfry - 48
Kod ASCII cyfry = wartość cyfry + 48
// Znaki liter //------------ #include <iostream> #include <iomanip> using namespace std; int main() { for(int i = 64; i < 96; i++) { cout << "Znak: " << char(i) << " kod: " << i; cout << " Znak: "; if(i + 32 == 127) cout << "DEL"; else cout << char(i + 32); cout << " kod: " << setw(3) << i + 32 << endl; } cout << endl; return 0; } |
Znak: @ kod: 64 Znak: `
kod: 96 Znak: A kod: 65 Znak: a kod: 97 Znak: B kod: 66 Znak: b kod: 98 Znak: C kod: 67 Znak: c kod: 99 Znak: D kod: 68 Znak: d kod: 100 Znak: E kod: 69 Znak: e kod: 101 Znak: F kod: 70 Znak: f kod: 102 Znak: G kod: 71 Znak: g kod: 103 Znak: H kod: 72 Znak: h kod: 104 Znak: I kod: 73 Znak: i kod: 105 Znak: J kod: 74 Znak: j kod: 106 Znak: K kod: 75 Znak: k kod: 107 Znak: L kod: 76 Znak: l kod: 108 Znak: M kod: 77 Znak: m kod: 109 Znak: N kod: 78 Znak: n kod: 110 Znak: O kod: 79 Znak: o kod: 111 Znak: P kod: 80 Znak: p kod: 112 Znak: Q kod: 81 Znak: q kod: 113 Znak: R kod: 82 Znak: r kod: 114 Znak: S kod: 83 Znak: s kod: 115 Znak: T kod: 84 Znak: t kod: 116 Znak: U kod: 85 Znak: u kod: 117 Znak: V kod: 86 Znak: v kod: 118 Znak: W kod: 87 Znak: w kod: 119 Znak: X kod: 88 Znak: x kod: 120 Znak: Y kod: 89 Znak: y kod: 121 Znak: Z kod: 90 Znak: z kod: 122 Znak: [ kod: 91 Znak: { kod: 123 Znak: \ kod: 92 Znak: | kod: 124 Znak: ] kod: 93 Znak: } kod: 125 Znak: ^ kod: 94 Znak: ~ kod: 126 Znak: _ kod: 95 Znak: DEL kod: 127 |
Zwróć uwagę, iż kody ASCII małych liter są zawsze o 32 większe od kodów odpowiadających im dużych liter. Wynika stąd prosty sposób wymiany liter dużych i małych:
kod ASCII małej litery = kod ASCII dużej
litery + 32
kod ASCII dużej litery = kod ASCII małej litery - 32
Podsumujmy podstawowe kody ASCII:
0...31 | 000xxxxx | kody sterujące |
32...63 | 001xxxxx | znaki pisarskie |
48...56 | 0011xxxx | cyfry |
64...95 | 010xxxxx | duże litery |
96...127 | 011xxxxx | małe litery |
Wybrane kody ASCII (nie musisz się ich uczyć na pamięć, ale w programowaniu zawsze warto je mieć pod ręką):
Kod | Dwójkowo | Znak |
0: | 00000000 | NUL |
7: | 00000111 | BEL |
8: | 00001000 | BS |
9: | 00001001 | HT |
10: | 00001010 | LF |
13: | 00001101 | CR |
32: | 00100000 | SP |
48: | 00110000 | Cyfra 0 |
57: | 00111001 | Cyfra 9 |
65: | 01000001 | Litera A |
90: | 01011010 | Litera Z |
97: | 01100001 | Litera a |
122: | 01111010 | Litera z |
127: | 01111111 | DEL |
// Kody rozszerzone ASCII // Strona kodowa CP-852 //----------------------- #include <iostream> using namespace std; int main() { for(int i = 128; i < 256; i++) cout << "Znak: " << char(i) << " kod: " << dec << i << " " << hex << "0x" << i << " " << oct << "0" << i << endl; cout << endl; return 0; } |
Znak: Ç kod: 128 0x80 0200 Znak: ü kod: 129 0x81 0201 Znak: é kod: 130 0x82 0202 Znak: â kod: 131 0x83 0203 Znak: ä kod: 132 0x84 0204 Znak: ů kod: 133 0x85 0205 Znak: ć kod: 134 0x86 0206 Znak: ç kod: 135 0x87 0207 Znak: ł kod: 136 0x88 0210 Znak: ë kod: 137 0x89 0211 Znak: Ő kod: 138 0x8a 0212 Znak: ő kod: 139 0x8b 0213 Znak: î kod: 140 0x8c 0214 Znak: Ź kod: 141 0x8d 0215 Znak: Ä kod: 142 0x8e 0216 Znak: Ć kod: 143 0x8f 0217 Znak: É kod: 144 0x90 0220 Znak: Ĺ kod: 145 0x91 0221 Znak: ĺ kod: 146 0x92 0222 Znak: ô kod: 147 0x93 0223 Znak: ö kod: 148 0x94 0224 Znak: Ľ kod: 149 0x95 0225 Znak: ľ kod: 150 0x96 0226 Znak: Ś kod: 151 0x97 0227 Znak: ś kod: 152 0x98 0230 Znak: Ö kod: 153 0x99 0231 Znak: Ü kod: 154 0x9a 0232 Znak: Ť kod: 155 0x9b 0233 Znak: ť kod: 156 0x9c 0234 Znak: Ł kod: 157 0x9d 0235 Znak: × kod: 158 0x9e 0236 Znak: č kod: 159 0x9f 0237 Znak: á kod: 160 0xa0 0240 Znak: í kod: 161 0xa1 0241 Znak: ó kod: 162 0xa2 0242 Znak: ú kod: 163 0xa3 0243 Znak: Ą kod: 164 0xa4 0244 Znak: ą kod: 165 0xa5 0245 Znak: Ž kod: 166 0xa6 0246 Znak: ž kod: 167 0xa7 0247 Znak: Ę kod: 168 0xa8 0250 Znak: ę kod: 169 0xa9 0251 Znak: ¬ kod: 170 0xaa 0252 Znak: ź kod: 171 0xab 0253 Znak: Č kod: 172 0xac 0254 Znak: ş kod: 173 0xad 0255 Znak: « kod: 174 0xae 0256 Znak: » kod: 175 0xaf 0257 Znak: ░ kod: 176 0xb0 0260 Znak: ▒ kod: 177 0xb1 0261 Znak: ▓ kod: 178 0xb2 0262 Znak: │ kod: 179 0xb3 0263 Znak: ┤ kod: 180 0xb4 0264 Znak: Á kod: 181 0xb5 0265 Znak: Â kod: 182 0xb6 0266 Znak: Ě kod: 183 0xb7 0267 Znak: Ş kod: 184 0xb8 0270 Znak: ╣ kod: 185 0xb9 0271 Znak: ║ kod: 186 0xba 0272 Znak: ╗ kod: 187 0xbb 0273 Znak: ╝ kod: 188 0xbc 0274 Znak: Ż kod: 189 0xbd 0275 Znak: ż kod: 190 0xbe 0276 Znak: ┐ kod: 191 0xbf 0277 Znak: └ kod: 192 0xc0 0300 Znak: ┴ kod: 193 0xc1 0301 Znak: ┬ kod: 194 0xc2 0302 Znak: ├ kod: 195 0xc3 0303 Znak: ─ kod: 196 0xc4 0304 Znak: ┼ kod: 197 0xc5 0305 Znak: Ă kod: 198 0xc6 0306 Znak: ă kod: 199 0xc7 0307 Znak: ╚ kod: 200 0xc8 0310 Znak: ╔ kod: 201 0xc9 0311 Znak: ╩ kod: 202 0xca 0312 Znak: ╦ kod: 203 0xcb 0313 Znak: ╠ kod: 204 0xcc 0314 Znak: ═ kod: 205 0xcd 0315 Znak: ╬ kod: 206 0xce 0316 Znak: ¤ kod: 207 0xcf 0317 Znak: đ kod: 208 0xd0 0320 Znak: Đ kod: 209 0xd1 0321 Znak: Ď kod: 210 0xd2 0322 Znak: Ë kod: 211 0xd3 0323 Znak: ď kod: 212 0xd4 0324 Znak: Ň kod: 213 0xd5 0325 Znak: Í kod: 214 0xd6 0326 Znak: Î kod: 215 0xd7 0327 Znak: ě kod: 216 0xd8 0330 Znak: ┘ kod: 217 0xd9 0331 Znak: ┌ kod: 218 0xda 0332 Znak: █ kod: 219 0xdb 0333 Znak: ▄ kod: 220 0xdc 0334 Znak: Ţ kod: 221 0xdd 0335 Znak: Ů kod: 222 0xde 0336 Znak: ▀ kod: 223 0xdf 0337 Znak: Ó kod: 224 0xe0 0340 Znak: ß kod: 225 0xe1 0341 Znak: Ô kod: 226 0xe2 0342 Znak: Ń kod: 227 0xe3 0343 Znak: ń kod: 228 0xe4 0344 Znak: ň kod: 229 0xe5 0345 Znak: Š kod: 230 0xe6 0346 Znak: š kod: 231 0xe7 0347 Znak: Ŕ kod: 232 0xe8 0350 Znak: Ú kod: 233 0xe9 0351 Znak: ŕ kod: 234 0xea 0352 Znak: Ű kod: 235 0xeb 0353 Znak: ý kod: 236 0xec 0354 Znak: Ý kod: 237 0xed 0355 Znak: ţ kod: 238 0xee 0356 Znak: ´ kod: 239 0xef 0357 Znak: kod: 240 0xf0 0360 Znak: ˝ kod: 241 0xf1 0361 Znak: ˛ kod: 242 0xf2 0362 Znak: ˇ kod: 243 0xf3 0363 Znak: ˘ kod: 244 0xf4 0364 Znak: § kod: 245 0xf5 0365 Znak: ÷ kod: 246 0xf6 0366 Znak: ¸ kod: 247 0xf7 0367 Znak: ° kod: 248 0xf8 0370 Znak: ¨ kod: 249 0xf9 0371 Znak: ˙ kod: 250 0xfa 0372 Znak: ű kod: 251 0xfb 0373 Znak: Ř kod: 252 0xfc 0374 Znak: ř kod: 253 0xfd 0375 Znak: ■ kod: 254 0xfe 0376 Znak: kod: 255 0xff 0377 |
Kolejny program robi to samo, jednak najpierw przełącza w konsoli kodowanie LATIN-2 na CP-1250:
// Kody rozszerzone ASCII // Strona CP-1250 //----------------------- #include <iostream> using namespace std; int main() { setlocale(LC_ALL,""); for(int i = 128; i < 256; i++) cout << "Znak: " << char(i) << " kod: " << dec << i << " " << hex << "0x" << i << " " << oct << "0" << i << endl; cout << endl; return 0; } |
Znak: ? kod: 128 0x80 0200 Znak: ? kod: 129 0x81 0201 Znak: ' kod: 130 0x82 0202 Znak: ? kod: 131 0x83 0203 Znak: " kod: 132 0x84 0204 Znak: kod: 133 0x85 0205 Znak: ┼ kod: 134 0x86 0206 Znak: ┼ kod: 135 0x87 0207 Znak: ? kod: 136 0x88 0210 Znak: % kod: 137 0x89 0211 Znak: Š kod: 138 0x8a 0212 Znak: < kod: 139 0x8b 0213 Znak: Ś kod: 140 0x8c 0214 Znak: Ť kod: 141 0x8d 0215 Znak: Ž kod: 142 0x8e 0216 Znak: Ź kod: 143 0x8f 0217 Znak: ? kod: 144 0x90 0220 Znak: ' kod: 145 0x91 0221 Znak: ' kod: 146 0x92 0222 Znak: " kod: 147 0x93 0223 Znak: " kod: 148 0x94 0224 Znak: kod: 149 0x95 0225 Znak: - kod: 150 0x96 0226 Znak: - kod: 151 0x97 0227 Znak: ? kod: 152 0x98 0230 Znak: t kod: 153 0x99 0231 Znak: š kod: 154 0x9a 0232 Znak: > kod: 155 0x9b 0233 Znak: ś kod: 156 0x9c 0234 Znak: ť kod: 157 0x9d 0235 Znak: ž kod: 158 0x9e 0236 Znak: ź kod: 159 0x9f 0237 Znak: kod: 160 0xa0 0240 Znak: ˇ kod: 161 0xa1 0241 Znak: ˘ kod: 162 0xa2 0242 Znak: Ł kod: 163 0xa3 0243 Znak: ¤ kod: 164 0xa4 0244 Znak: Ą kod: 165 0xa5 0245 Znak: | kod: 166 0xa6 0246 Znak: § kod: 167 0xa7 0247 Znak: ¨ kod: 168 0xa8 0250 Znak: c kod: 169 0xa9 0251 Znak: Ş kod: 170 0xaa 0252 Znak: « kod: 171 0xab 0253 Znak: ¬ kod: 172 0xac 0254 Znak: kod: 173 0xad 0255 Znak: R kod: 174 0xae 0256 Znak: Ż kod: 175 0xaf 0257 Znak: ° kod: 176 0xb0 0260 Znak: + kod: 177 0xb1 0261 Znak: ˛ kod: 178 0xb2 0262 Znak: ł kod: 179 0xb3 0263 Znak: ´ kod: 180 0xb4 0264 Znak: u kod: 181 0xb5 0265 Znak: ¶ kod: 182 0xb6 0266 Znak: kod: 183 0xb7 0267 Znak: ¸ kod: 184 0xb8 0270 Znak: ą kod: 185 0xb9 0271 Znak: ş kod: 186 0xba 0272 Znak: » kod: 187 0xbb 0273 Znak: Ľ kod: 188 0xbc 0274 Znak: ˝ kod: 189 0xbd 0275 Znak: ľ kod: 190 0xbe 0276 Znak: ż kod: 191 0xbf 0277 Znak: Ŕ kod: 192 0xc0 0300 Znak: Á kod: 193 0xc1 0301 Znak: Â kod: 194 0xc2 0302 Znak: Ă kod: 195 0xc3 0303 Znak: Ä kod: 196 0xc4 0304 Znak: Ĺ kod: 197 0xc5 0305 Znak: Ć kod: 198 0xc6 0306 Znak: Ç kod: 199 0xc7 0307 Znak: Č kod: 200 0xc8 0310 Znak: É kod: 201 0xc9 0311 Znak: Ę kod: 202 0xca 0312 Znak: Ë kod: 203 0xcb 0313 Znak: Ě kod: 204 0xcc 0314 Znak: Í kod: 205 0xcd 0315 Znak: Î kod: 206 0xce 0316 Znak: Ď kod: 207 0xcf 0317 Znak: Đ kod: 208 0xd0 0320 Znak: Ń kod: 209 0xd1 0321 Znak: Ň kod: 210 0xd2 0322 Znak: Ó kod: 211 0xd3 0323 Znak: Ô kod: 212 0xd4 0324 Znak: Ő kod: 213 0xd5 0325 Znak: Ö kod: 214 0xd6 0326 Znak: × kod: 215 0xd7 0327 Znak: Ř kod: 216 0xd8 0330 Znak: Ů kod: 217 0xd9 0331 Znak: Ú kod: 218 0xda 0332 Znak: Ű kod: 219 0xdb 0333 Znak: Ü kod: 220 0xdc 0334 Znak: Ý kod: 221 0xdd 0335 Znak: Ţ kod: 222 0xde 0336 Znak: ß kod: 223 0xdf 0337 Znak: ŕ kod: 224 0xe0 0340 Znak: á kod: 225 0xe1 0341 Znak: â kod: 226 0xe2 0342 Znak: ă kod: 227 0xe3 0343 Znak: ä kod: 228 0xe4 0344 Znak: ĺ kod: 229 0xe5 0345 Znak: ć kod: 230 0xe6 0346 Znak: ç kod: 231 0xe7 0347 Znak: č kod: 232 0xe8 0350 Znak: é kod: 233 0xe9 0351 Znak: ę kod: 234 0xea 0352 Znak: ë kod: 235 0xeb 0353 Znak: ě kod: 236 0xec 0354 Znak: í kod: 237 0xed 0355 Znak: î kod: 238 0xee 0356 Znak: ď kod: 239 0xef 0357 Znak: đ kod: 240 0xf0 0360 Znak: ń kod: 241 0xf1 0361 Znak: ň kod: 242 0xf2 0362 Znak: ó kod: 243 0xf3 0363 Znak: ô kod: 244 0xf4 0364 Znak: ő kod: 245 0xf5 0365 Znak: ö kod: 246 0xf6 0366 Znak: ÷ kod: 247 0xf7 0367 Znak: ř kod: 248 0xf8 0370 Znak: ů kod: 249 0xf9 0371 Znak: ú kod: 250 0xfa 0372 Znak: ű kod: 251 0xfb 0373 Znak: ü kod: 252 0xfc 0374 Znak: ý kod: 253 0xfd 0375 Znak: ţ kod: 254 0xfe 0376 Znak: ˙ kod: 255 0xff 0377 |
Jeśli porównamy wyniki pracy obu programów, to okaże się, iż kody polskich literek w obu kodach są inne. Zaznaczyliśmy je kolorem zielonym.
Niektóre kody w kodowaniu CP-1250 dają puste znaki, co zaburza wydruk. Zaznaczyliśmy je kolorem czerwonym.
LATIN-2
|
CP-1250
|
Porównanie polskich znaków w kodach LATIN-2 i CP-1250 wygląda następująco:
LATIN-2
|
CP-1250
|
Polskie znaki w obu kodach są ustawione nie po kolei, utrudnia to np. sortowanie alfabetyczne polskich wyrazów. Poniższa tabelka zawiera kody polskich znaków w obu systemach kodowania:
Ą | Ć | Ę | Ł | Ń | Ó | Ś | Ź | Ż | |
LATIN-2 | 164 | 143 | 168 | 157 | 227 | 224 | 151 | 141 | 189 |
CP1250 | 165 | 198 | 202 | 163 | 209 | 211 | 140 | 143 | 175 |
ą | ć | ę | ł | ń | ó | ś | ź | ż | |
LATIN-2 | 165 | 134 | 169 | 136 | 228 | 162 | 152 | 171 | 190 |
CP1250 | 185 | 230 | 234 | 179 | 241 | 243 | 156 | 159 | 191 |
Kod ASCII nie jest obecnie jedynym kodem w użyciu. Wnikliwym proponuję zapoznać się z artykułami:
https://pl.wikipedia.org/wiki/UTF-8
https://pl.wikipedia.org/wiki/Unicode
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.