Transcript Document

Architektura systemów komputerowych (jesień 2014) Wykład 4 Reprezentacja danych część 4

dr inż. Wojciech Bieniecki Instytut Matematyki i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz

Kolejność bajtów w słowach

W sytuacjach, kiedy liczby, znaki lub inne dane zapisywane są przy użyciu wielu bajtów, nie istnieje jeden unikatowy sposób uporządkowania tych bajtów w pamięci.

Musi być użyta jedna z wielu konwencji ustalająca kolejność bajtów (byte order lub endianness).

Analogia do zapisu pozycyjnego liczb lub kierunku pisma w różnych językach – ze strony lewej na prawą albo z prawej na lewo.

Ciekawostka: Użyte poniżej nazwy big endian i little endian pochodzą z książki Jonathana Swifta Podróże Guliwera i odnoszą się do mieszkańców Liliputu, których spór o to, czy ugotowane jajko należy tłuc od grubego (tępego), czy od cienkiego (ostrego) końca, doprowadził do podziału na dwa stronnictwa toczące ze sobą niekończące się, choć bezsensowne dysputy i wojny.

2

Kolejność bajtów w słowach

Little endian (spotykane także cienkokońcowość) to forma zapisu danych, w której mniej znaczący bajt (zwany też dolnym bajtem, low-order byte, LSB) umieszczony jest jako pierwszy.

Procesor zapisujący 32-bitowe wartości w pamięci, przykładowo 4A 3B 2C 1D pod adresem 100, umieszcza dane zajmując adresy od 100 do 103 w następującej kolejności:

...

100 1D 101 2C 102 3B 103 4A ...

Procesory, które używają formy little endian, to między innymi wszystkie z rodziny x86, DEC VAX 3

Kolejność bajtów w słowach

Big endian (spotykane także grubokońcowość) to forma zapisu danych, w której najbardziej znaczący bajt (zwany też grubym bajtem, z ang. high-order byte) umieszczony jest jako pierwszy.

Procesor zapisujący 32-bitowe wartości w pamięci, przykładowo 4A 3B 2C 1D pod adresem 100, umieszcza dane, zajmując adresy od 100 do 103 w następującej kolejności:

...

100 4A 101 3B 102 2C 103 1D ...

Procesory, które używają formy big endian, to między innymi SPARC, Motorola 68000, PowerPC 970, IBM System/360, Siemens SIMATIC S7.

Istnieją także procesory, w których można przełączyć tryb kolejności bajtów, należą do nich na przykład PowerPC (do serii PowerPC G4), SPARC, ARM, MIPS 4

Kolejność bajtów w słowach - odwracanie

X = aaaaaaaa bbbbbbbb cccccccc dddddddd m1= 11111111 00000000 00000000 00000000 m2= 00000000 11111111 00000000 00000000 m3= 00000000 00000000 11111111 00000000 m4= 00000000 00000000 00000000 11111111 W1 = (X & m1)>>24 = 00000000 00000000 00000000 aaaaaaaa W2 = (X & m2)>>8 = 00000000 00000000 bbbbbbbb 00000000 W3 = (X & m3)<<8 = 00000000 cccccccc 00000000 00000000 W4 = (X & m3)<<24 = dddddddd 00000000 00000000 00000000 int reverseEndian(int x) { return (x&0xff000000)>>24 | (x&0x00ff0000)>> 8 | (x&0x0000ff00)<< 8 | (x&0x000000ff)<<24; }

5

Kod ASCII

ASCII (American Standard Code for Information Interchange) Opracowany dla urządzeń dalekopisowych, później przyjęty dla komputerów 7-bitowy kod przyporządkowujący liczby z zakresu 0-127 literom (alfabetu angielskiego), cyfrom, znakom przestankowym i innym symbolom oraz poleceniom sterującym litery, cyfry oraz inne znaki drukowane tworzą zbiór znaków ASCII jest to 95 znaków o kodach 32-126 pozostałe 33 kody (0-31 i 127) to tzw. kody sterujące służące do sterowania urządzeniem odbierającym komunikat, np. drukarką czy terminalem 6

Kody ASCII

7

Tablica bitowa kodów ASCII

8

Kod ASCII – znaki sterujące

33 kody – 0-31 i 127 znaki niedrukowalne: sygnały dźwiękowe, białe znaki (tabulacja, spacja, znak końca wiersza, powrót na początek wiersza) 2 3 4 10 11 12 13 14 15 16 5 6 7 8 9 17 Kod dziesiętny 0 Znak Opisy znaków sterujących NUL Zero :) 1 SQH (Start Of Heading) - początek nagłówka = SOM STX (Start Of Text) - początek tekstu = EOA ETX (End Of Text) - koniec tekstu = EOM EOT (End Of Transmission) - koniec transmisji ENQ (Enquiry) - wywołanie stacji ACK (Acknowledge) - potwierdzenie BEL (Bell) - dzwonek

BS

(Back Space) - powrót o 1 pozycję

HT

(Horizontal Tab) - tabulacja pozioma

LF VT FF CR SO

(Line Feed) - przesuw o 1 wiersz (Vertical Tab) - tabulacja pionowa (Form Feed) - przesuw o 1 stronę (Carriage Return) - powrót karetki (Switch Output) - wyjście (przełączenie trwałe)

SI

(Switch Input) wejście(przełączenie powrotne) DLE (Data Link Escape) - pominięcie znaków sterujących

DC1

(Device Control 1) - sterowanie urządzenia 1 / start transmisji = XON 9

Kod ASCII – zakończenie wiersza

W systemie DOS/ Windows każdy wiersz pliku zakończony jest parą znaków: CR, kod ASCII - 13 (10) = 0D (16) - powrót na początek wiersza LF, kod ASCII - 10 (10) = 0A (16) - przesunięcie o wiersz w systemie Linux znakiem końca wiersza jest tylko: LF, kod ASCII - 10 (10) = 0A (16) podczas przesyłania pliku tekstowego z systemu Linux do systemu DOS/Windows pojedynczy znak LF zamieniany jest automatycznie na parę znaków CR i LF błędne przesłanie pliku tekstowego (w trybie binarnym) powoduje nieprawidłowe jego wyświetlanie 10

Kod ASCII – znak końca wiersza

DOS / Windows (32B): UNIX / Linux (30B): Mac OS (30B): 11

Podstawowe funkcje znakowe

isdigit – czy znak jest cyfrą?

isalnum – czy znak jest literą?

isspace – czy znak jest odstępem?

ispunct – czy znak jest znakiem przestankowym?

isprint – czy znak jest znakiem drukowanym isgraph – czy znak jest symbolem graficznym?

toupper – zamiana małych liter na duże tolower – zamiana dużych liter na małe 12

isdigit

0110000 0 0110001 1 0110010 2 0110011 3 0110100 4 0110101 5 0110110 6 0110111 7 0111000 8 0111001 9 int isdigit(char c) { return (c>=48 && c<=58); }

13

isalnum

int isupper(char c) { return (c>='A' && c<='Z'); } int islower(char c) { return (c>='a' && c<='z') } int isalpha(char c) { return ((c>='A' && c<='Z') || (c>='a' && c<='z')); }

14

toupper, tolower

char toupper(char c) { if ( (c >= 'a') && (c <= 'z') ) c = c - ('a' - 'A'); return c; } char tolower(char c) { if ( (c >= 'A') && (c <= 'Z') ) c = c + ('a' - 'A'); return c; }

15

Rozszerzony od ASCII

Kod ASCII w wersji podstawowej jest 7-bitowy Większość komputerów pracuje na 8-bitowych bajtach Dodatkowy bit jest wykorzystywany do powiększenia zbioru kodowanych znaków Powstało wiele ro żnych rozszerzeń ASCII wykorzystują cych o smy bit, nazywanych stronami kodowymi (np. norma ISO 8859, rozszerzenia firm IBM lub Microsoft) 16

Kod ASCII – strony kodowe

Strony kodowe – wersje kodu ASCII różniące się interpretacją symboli o numerach od 128 do 255.

RÓżne strony kodowe mogą przyjąć odmienne znaki dla tego samego kodu Różne strony kodowe mogą różnić się wyborem znaków Duża liczba dostępnych stron kodowych wynika z faktu, że na 8 bitach można zakodować tylko 256 rożnych znaków, co jest niewystarczające do zmieszczenia w jednym zestawie znaków wszystkich alfabetów Przykłady stron kodowych uwzględniające polskie litery: ISO 8859-2 (Latin-2), ISO 8859-16 (Latin-10) 17

ISO 8859

Zestaw standardów służących do kodowania znaków za pomocą 8 bitów Standardy te zostały utworzone przez European Computer Manufactures’ Association (ECMA) w połowie lat osiemdziesiątych, a następnie uznane przez ISO Wszystkie zestawy ISO 8859 mają znaki 0-127 takie same jak ASCII Pozycjom 128-159 przypisane są dodatkowe kody sterujące, tzw. C1 (faktycznie są nieużywane).

18

Standardy ISO 8859

ISO 8859-1 (Latin-1) - alfabet łaciński dla Europy zachodniej ISO 8859-2 (Latin-2) – alfabet łaciński dla Europy środkowej i wschodniej, również odpowiednia Polska Norma ISO 8859-3 (Latin-3) – alfabet łaciński dla Europy południowej ISO 8859-4 (Latin-4) – alfabet łaciński dla Europy północnej ISO 8859-5 (Cyrlic) – alfabet dla cyrylicy ISO 8859-6 (Arabic) - dla alfabetu arabskiego ISO 8859-7 (Greek) - dla alfabetu greckiego ISO 8859-8 (Hebrew) - dla alfabetu hebrajskiego ISO 8859-9 (Latin-5) ISO 8859-10 (Latin-6) ISO 8859-11 (Thai) - dla alfabetu tajskiego ISO 8859-13 (Latin-7) ISO 8859-14 (Latin-8) ISO 8859-15 (Latin-9) - z ISO 8859-1 usunięto kilka rzadko używanych znaków i wprowadzono znak Euro oraz litery Š, š , Ž, ž, OE , oe oraz Ÿ ISO 8859-16 (Latin-10) – alfabet łaciński dla Europy środkowej - zmodyfikowany ISO 8859-2 ze znakiem Euro i dodatkowymi literami dla kilku języków.

19

Kod ISO 8859-1

kodowanie używane w Amerykach, Europie Zachodniej, Oceanii i większej części Afryki dostępne języki: albański, angielski, baskijski, duński, estoński, fiński, francuski, hiszpański, irlandzki, islandzki, kataloński, łaciński, niderlandzki, niemiecki, norweski, portugalski, retoromański, szkocki, szwedzki, włoski składa się ze 191 znaków łacińskiego pisma po rozszerzeniu o dodatkowe przypisania znaków jest podstawą dla dwóch mapowań znaków ISO-8859-1 i Windows-1252 20

Kod ISO 8859-2

dostępne języki: bośniacki, chorwacki, czeski, węgierski, polski, rumuński, serbski, słowacki, słoweński, górno- i dolnołużycki możliwość przedstawienia znaków w języku niemieckim i angielskim składa się ze 191 znaków łacińskiego pisma zapisywanych na 8 bitach kody z przedziałów 00 (16) -1F (16) ISO-8859-2 oraz 7F (16) -9F (16) nie są używane w kodowanie to jest zgodne z Polską Normą 21

ISO 8859-1 i 8859-2 – porównanie

22

Windows 1250

Standard kodowania używana przez system Microsoft Windows do reprezentacji tekstów w językach środkowoeuropejskich używających alfabetu łacińskiego, takich jak albański, chorwacki, czeski, polski, rumuński, słowacki, węgierski jest podobny do ISO 8859-2 – posiada wszystkie jego drukowalne znaki (a także kilka dodatkowych), lecz kilka z nich zajmuje inne miejsca 23

Windows 1250 i ISO 8859-2

Hex 0x80 0x81 0x82 0x83 0x84 0x85 0x86 0x87 … † ‡ 0x88 0x89 0x8A Š

NZ

‰ CP 1250 €

NZ

NZ

„ 0x8B ‹ 0x8C Ś 0x8D Ť 0x8E Ž 0x8F Ź

ZK ZK ZK ZK ZK ZK ZK ZK ZK ZK ZK

ISO 88592

ZK ZK ZK ZK ZK

Hex 0x90 0x91 0x92 0x93 0x94 0x95 0x96 0x97 0x98 0x99 0x9A 0x9B 0x9C 0x9D 0x9E 0x9F ť ž ź • – – › š

NZ

™ ś ’ “ ” CP 1250 ‘

NZ ZK ZK ZK ZK ZK ZK ZK ZK

ISO 88592

ZK ZK ZK ZK ZK ZK ZK ZK

Hex CP 1250 0xA0 0xA1 ˇ 0xA2 ˘ 0xA3 Ł 0xA4 ¤ 0xA5 0xA6 0xA7 Ą ¦ § 0xA8 ¨ 0xA9 © 0xAA Ş 0xAB « 0xAC ¬ 0xAD 0xAE 0xAF ® Ż Ľ Ś ISO 88 59-2 Ą Š Ť Ź Ž Hex 0xB0 0xB1 0xB2 0xB3 0xB4 0xB5 0xB6 0xB7 0xB8 0xB9 0xBA ş 0xBB » 0xBC ¸ ą Ľ · µ ¶ ´ ˛ ł CP 1250 ° ± 0xBD ˝ 0xBE ľ 0xBF ż ľ ś ˇ ť ź ISO 88 59-2 ą š ž NZ - znak niezdefiniowany w kodowaniu ZK znak kontrolny, Znak znak wspólny dla obydwu kodowań.

Hex 0xC0 0xC1 0xC2 0xC3 0xC4 0xC5 0xC6 0xC7 0xD3 0xD4 0xD5 0xD6 0xD7 0xD8 0xD9 0xDA 0xDB 0xDC 0xDD 0xDE 0xDF 0xC8 0xC9 0xCA 0xCB 0xCC 0xCD 0xCE 0xCF 0xD0 0xD1 0xD2 CP 1250 Ó Ô Ő Ö × Ř Ý Ţ ß Ů Ú Ű Ü Č É Ę Ë Ě Í Î Ď Đ Ń Ň Â Ă Ä Ĺ Ć Ç Ŕ Á ISO 8859-2 Hex 0xF3 0xF4 0xF5 0xF6 0xF7 0xF8 0xF9 0xFA 0xFB 0xFC 0xFD 0xFE 0xFF 0xE0 0xE1 0xE2 0xE3 0xE4 0xE5 0xE6 0xE7 0xE8 0xE9 0xEA 0xEB 0xEC 0xED 0xEE 0xEF 0xF0 0xF1 0xF2 ý ţ 24 ˙ ů ú ű ü ń ň ó ô ő ö ÷ ř CP 1250 ŕ á â ă ISO 8859-2 ć ç ä ĺ î ď đ č é ę ë ě í

Kodowanie polskich znaków

Tekst przykładowy: Ą Ć Ę Ł Ń Ó Ś Ź Ż ą ć ę ł ń ó ś ź ż Tekst zapisany w standardzie ISO – 8859-2 Tekst zapisany w standardzie CP-1250 ISO-8859-2 wyświetlony w edytorze obsługującym CP-1250 ˇ Ć Ę Ł Ń Ó ¦ ¬ Ż ± ć ę ł ń ó ¶ Ľ ż CP-1250 wyświetlony w edytorze obsługującym ISO-8859-2 Ľ Ć Ę Ł Ń Ó Œ Œ 25

Standardy kodowania polskich znaków

W Polsce stosowanych było ok. 20 standardów kodowania polskich liter Próby wprowadzania standardu Mazovia - promowany przez społeczność informatyczną w Polsce (nie był pełną stroną kodową , ale określał sposób kodowania polskich liter) IBM-Latin-2 (CP-852) - stosowany w DOS, OS/2 i części systemu Windows CP-1250 (Windows-1250) – stosowany w MS Windows PL ISO-Latin-2 (ISO 8859-2) - stosowany w Internecie Standard ISO 8859-2 jest zgodny z Polską Normą PN-93 T-42118 26

Unicode

Komputerowy zestaw znaków mający w zamierzeniu obejmować wszystkie pisma i inne znaki (symbole muzyczne, techniczne, wymowy) używane na świecie Unicode przypisuje unikalny numer każdemu znakowi, niezależnie od używanej platformy, programu czy języka Definiowany jest przez dwa standardy, w których znaki są identyczne: Unicode i ISO/IEC 10646 Standard Unicode zaimplementowany został w wielu nowych technologiach, np. XML, Java, Microsoft .NET Framework, nowe systemy operacyjne 27

Unicode

Rozwijany jest przez konsorcjum, w skład którego wchodzą firmy komputerowe, producenci oprogramowania oraz grupy użytkowników - http://www.unicode.org

Strona polska: http://www.unikod.pl

Pierwsza wersja: Unicode 1.0

(październik 1991) Ostatnia wersja: Unicode 6.2.0

(wrzesień 2012) 28

Podstawowe właściwości Unicode

Jednoznaczność – każdemu znakowi zakodowanemu za pomocą Unicode odpowiada zawsze ta sama wartość liczbowa i odwrotnie.

Uniwersalność – dostępne znaki obejmują wszystkie powszechnie używane języki i symbole.

16-bitowa reprezentacja – każdy znak reprezentowany jest w postaci 16-bitowej liczby, czyli można zakodować 2 16 =65536 różnych znaków Efektywność – ułatwienie manipulowania tekstami, gdyż identyfikacja znaku nie zależy od sekwencji sterujących czy znaków następujących bądź poprzedzających 29

UTF-8 – kodowanie znaków Unicode

Unicode Transformation Format. Jest to przykład kodu bajtowego Mapowanie znaków Unikodu na ciągi bajtów: 0x00 do 0x7F 0x80 do 0x7FF 0x800 do 0xFFFF 0x10000 do 0x1FFFFF 0x200000 do 0x3FFFFFF 0xxxxxxx 110xxxxx 10xxxxxx 1110xxxx 10xxxxxx 10xxxxxx 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0x4000000 do 0x7FFFFFFF - 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Dla pierwszych znaków z przedziału ASCII od 0 do 127 (czyli dla np j.ang) znak jest mapowany jako jeden bajt.

Dla znaków powyżej (np. polskie znaki) jest mapowany jako dwa bajty (lub więcej).

30

UTF-8 - kodowanie

oznacza to, że ten sam znak można zapisać na kilka sposobów. Przykładowo znak ASCII / (ukośnik) można zapisać jako:

00101111 11000000 10101111 11100000 10000000 10101111

Standard UTF-8 przewiduje, że każdy program MUSI odrzucać wszystkie znaki zapisane sekwencjami dłuższymi niż minimalna.

31

UTF-8 Zalety

Każdy tekst w ASCII jest tekstem w UTF-8.

Żaden znak spoza ASCII nie zawiera bajtu z ASCII.

Zachowuje porządek sortowania UCS-4.

Typowy tekst ISO-Latin-X rozrasta się w bardzo niewielkim stopniu po przekonwertowaniu do UTF-8.

Nie zawiera bajtów 0xFF i 0xFE, więc łatwo można go odróżnić od tekstu UTF-16.

Znaki o kodzie różnym od 0 nie zawierają bajtu 0, co pozwala stosować UTF-8 w ciągach zakończonych zerem.

O każdym bajcie wiadomo, czy jest początkiem znaku, czy też leży w jego środku (co nie jest prawdą np. w kodowaniu EUC).

Nie ma problemów z little endian i big endian.

Jest domyślnym kodowaniem w XML (również w jego aplikacjach: XHTML, SVG, XSL, CML, MathML) 32

UTF-8 – Wady

Znaki CJK (chiński-japoński-koreański) zajmują po 3 bajty zamiast 2 w kodowaniach narodowych.

Znaki alfabetów niełacińskich zajmują po 2 bajty zamiast jednego w kodowaniach narodowych.

UTF-8 nie używa przesunięć zasięgów, co stanowi dodatkowe utrudnienie dla implementacji UTF-8 Problemu tego można byłoby uniknąć, przy okazji skracając nieznacznie długość • • • • danych, jeśli wykorzystano by zasadę przesunięć typu: sekwencje 1-bajtowe kodują 0x80 różnych znaków - od 0x00 do 0x7F sekwencje 2-bajtowe kodują 0x800 różnych znaków - od 0x80 do 0x87F sekwencje 3-bajtowe kodują 0x10000 różnych znaków - od 0x880 do 0x1087F itd.

33

UTF-16

Sposób ten wymaga użycia szesnastobitowych słów Dla znaków na pozycjach poniżej 65536 (przedział 0000-FFFF) używane jest jedno słowo, którego wartość odpowiada pozycji znaku w standardzie. Dla znaków z wyższych pozycji używa się dwóch słów.

Pierwsze z nich należy do przedziału D800–DBFF, drugie: DC00-DFFF. Znak o kodzie szesnastkowym 10000 zostanie zamieniony na sekwencję D800 DC00 a znak o kodzie 10FFFD (górna granica unikodu) na DBFF DFFD.

W standardzie Unicode pozycjom z przedziału D800–DFFF nie są przypisane żadne znaki, zatem każda sekwencja słów kodowych jest interpretowana jednoznacznie.

34

UTF-32

wymaga użycia trzydziestodwubitowych słów. Zestaw znaków jest też zdefiniowany w standardzie ISO 10646 jako UCS-4 Kody obejmują zakres od 0 do 0x7FFFFFFF. Kod znaku zawsze ma długość 4 bajtów i w zapisie big endian przedstawia po prostu numer znaku w tabeli Unikodu.

ZALETA

Stała długość kodu każdego znaku

WADA

Mała efektywność- zakodowane ciągi znaków są dwa do czterech razy dłuższe niż ciągi tych samych znaków zapisanych w innych kodowaniach.

ZASTOSOWANIE

tylko w RAM w celu ułatwienia obsługi i przetwarzania (np. obliczenie długości czy wycinanie ciągu znaków jest bardzo proste) 35

Kod EBCDIC

(ang. Extended Binary Coded Decimal Interchange Code, czyli rozszerzony dziesiętny zakodowany dwójkowo kod wymiany) to ośmiobitowe kodowanie znaków używane głównie w systemach IBM.

Pojedynczy znak zapisywany jest na 8 bitach podzielonych na dwie części. Pierwsze 4 bity, nazywane strefą, oznaczają grupę do jakiej dany znak należy, podczas gdy ostatnie 4 bity, zwane cyfrą, identyfikują konkretny znak.

40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 0 é / É a J ÷ 1 j ~ £ A } \ 0 & ø Ø ° µ ¢ { 1 2 â ê Â Ê b k s ¥ B K S 2 4 à è À È d m u © D M U 4 3 ä ë Ä Ë c l t · C L T 3 6 ã î Ã Î f o w ¶ F O W 6 N V 5 5 n v § E á í Á Í e 7 å ï Å Ï g p x ¼ G P X 7 9 ñ ß Ñ ` i r z ¾ I R Z 9 8 ç ì Ç Ì h q y ½ H Q Y 8 ¹ ² ³ C < * % @ ð æ Ð ¯ ö ü Ö Ü B .

$ , # » º ¿ | ô û Ô Û ª ¡ ¬ A [ ] ¦ : « F !

^ ?

" ± ¤ ® × õ ÿ Õ ú Ó Ú E Æ Þ ´ ó + ; > = þ ù Ò Ù D ¸ Ý ¨ ò ( ) _ ' ý

36

Kod Radix-50

Kod ten jest nazywany Rad-50 lub RAD50, zaprojektowany przez Digital Equipment Corporation dla komputerów DECsystem, PDP, i VAX.

Kod ten ma pozwala zapisać 40 różnych znaków (ósemkowo 50), w tym spacja, 26 liter, znak dolara, kropka, cyfry w dwóch wariantach: 1.

2.

3 znaki na słowie 16 bitowym.

6 znaków wraz z flagą informacyjną na słowie 36 bitowym.

PDP-6, PDP-10/DECsystem-10, DECSYSTEM-20 Least significant bits m. s. bits 000 001 010 011 100 101 110 111 000 001

space 7 0 8 1 9 2 A 3 B 4 C 5 D 6 E

010 011 100

F N V G O W H P X I Q Y J R Z K S .

L T $ M U % 37

Kod Radix-50

m. s. bits 000 001 010 011 100 000

space H P X 2

001

A I Q Y 3

PDP-11, VAX Least significant bits 010

B J

011

C K

100 101

D L E M R Z 4 S $ 5 T .

6 U % 7

110

F N V 0 8

111

G O W 1 9 Łańcuchy tekstowe są kodowane na kolejnych słowach. Pierwszy znak w obrębie słowa zajmuje najstarszą pozycję. Przykład: Zakodować napis ABCDEF używając PDP-11.

Wartości znaków to 1,2,3,4,5,6. Będą one zakodowane jako słowa: (1*40 + 2) * 40 + 3 = 1683 (4*40 + 5) * 40 + 6 = 6606 Każdy łańcuch jest uzupełniany spacjami na końcu do wielokrotności trzech znaków.

38

Kod Radix-50

Istnieje wiele odmian kodowania Rad-50. Np. w systemie operacyjnym RT-11 wartość 011101 jest określona jako niezdefiniowana natomiast programy użytkowe przypisywały jej reprezentację * Użycie Rad-50 wymusiło konwencję zapisu nazw plików w systemie PDP-11. Nazwa pliku składa się z 6 znaków nazwy właściwej i trzech znaków rozszerzenia. Cały łańcuch można było zapisać na trzech słowach (kropki rozdzielającej nie trzeba pamiętać) Rad-50 był często stosowany w tablicach symboli dla różnych języków programowania dla PDP-11.

39

Kod Base64

Base64 służy do kodowania ciągu bajtów za pomocą ciągu znaków Przypisuje 64 wybranym znakom wartości od 0 do 63.

Wart.

0 1 2 3 4 5 6 7 8 9 10

I J K A B C D E F G H

Znak 16 17 18 19 20 21 Wart.

11 12 13 14 15

Q R S T U V N O P L M

Znak 27 28 29 30 31 32 Wart.

22 23 24 25 26

b c d f e g Y Z a W X

Znak 38 39 40 41 42 43 Wart.

33 34 35 36 37

p q r l j k i h m n o

Znak 49 50 51 52 53 54 Wart.

44 45 46 47 48

0 1 2 s t u v w x y z

Znak pad 60 61 62 63 Wart.

55 56 57 58 59

3 4 5 6 7 8 9 + /

Znak

=

Ciąg bajtów poddawany kodowaniu dzielony jest na grupy po 3 bajty.

Każdą taką grupę dzieli się następnie na 4 jednostki 6-bitowe. Istnieją więc dokładnie 64 możliwe wartości każdej takiej jednostki Jeśli rozmiar wejściowego ciągu bajtów nie jest wielokrotnością liczby 3, to stosowane jest dopełnianie 40

Kod Base64

Rodzaj kodowania transportowego Wykorzystywane m.in. do: • przesyłania załączników binarnych w poczcie elektronicznej, • pamiętania ViewState w stronach WWW tworzonych przy użyciu technologii ASP.NET, • kodowania haseł wysyłanych w protokole SMTP podczas uwierzytelniania metodami PLAIN i LOGIN.

Przykład: Idealy sa jak gwiazdy - nie mozna ich osiagnac, ale mozna sie nimi kierowac.

SWRlYWx5IHNhIGphayBnd2lhemR5IC0gbmllIG1vem5hIGljaCBvc2lhZ25hYywgY WxlIG1vem5hIHNpZSBuaW1pIGtpZXJvd2FjLg0K 41