Document

Report
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)
Kod
Znak Opisy znaków sterujących
dziesiętny
Kod
Znak Opisy znaków sterujących
dziesiętny
0
NUL Zero :)
18
1
SQH (Start Of Heading) - początek nagłówka = SOM
19
2
STX (Start Of Text) - początek tekstu = EOA
20
DC2 (Device Control 2) - sterowanie urządzenia 2
(Device Control 3) - sterowanie urządzenia 3 / stop
DC3
transmisji = XOFF
DC4 (Device Control 4) - sterowanie urządzenia 4
3
ETX (End Of Text) - koniec tekstu = EOM
21
NAK
4
EOT (End Of Transmission) - koniec transmisji
(Negative Acknowledge) - potwierdzenie negatywne
(gdy wystąpił błąd)
5
6
7
8
ENQ
ACK
BEL
BS
(Enquiry) - wywołanie stacji
(Acknowledge) - potwierdzenie
(Bell) - dzwonek
(Back Space) - powrót o 1 pozycję
9
HT
(Horizontal Tab) - tabulacja pozioma
22
23
24
25
26
27
SYN
ETB
CAN
EM
SUB
ESC
(Sync) - synchronizacja
(End Transmission Blok) - koniec bloku
(Cancel) - anulowanie
(End of Medium) - koniec nośnika (zapisu)
(Substitute) - zastąpienie
(Escape) - przełączenie
10
11
12
13
14
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)
28
FS
(File Separator) - poprzedza dane alfanumeryczne
29
GS
(Group Separator) - poprzedza dane binarne
15
16
SI
(Switch Input) wejście(przełączenie powrotne)
DLE (Data Link Escape) - pominięcie znaków sterujących
(Device Control 1) - sterowanie urządzenia 1 / start
DC1
transmisji = XON
30
31
32
127
RS
US
SP
DEL
(Record Separator) - separator rekordów
(Unit Separator) - separator pozycji
(Space) - spacja (odstęp)
Znak usunięcia znaku
17
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
0110001
0110010
0110011
0110100
0110101
0110110
0110111
0111000
0111001
0
1
2
3
4
5
6
7
8
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 8bitach
kody z przedziałów 00(16)-1F(16) oraz 7F(16)-9F(16) nie są używane w
ISO-8859-2
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
0x8B
0x8C
0x8D
0x8E
0x8F
CP1250
€
NZ
‚
NZ
„
…
†
‡
NZ
‰
Š
‹
Ś
Ť
Ž
Ź
ISO
88592
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
Hex
0x90
0x91
0x92
0x93
0x94
0x95
0x96
0x97
0x98
0x99
0x9A
0x9B
0x9C
0x9D
0x9E
0x9F
CP1250
NZ
‘
’
“
”
•
–
–
NZ
™
š
›
ś
ť
ž
ź
ISO
88592
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
ZK
Hex
0xA0
0xA1
0xA2
0xA3
0xA4
0xA5
0xA6
0xA7
0xA8
0xA9
0xAA
0xAB
0xAC
0xAD
0xAE
0xAF
CPISO 88
1250 59-2
ˇ
˘
Ł
¤
Ą
¦
§
¨
©
Ş
«
¬
Ą
®
Ż
Ž
Ľ
Ś
Š
Ť
Ź
CP1250
0xB0 °
0xB1 ±
0xB2 ˛
0xB3 ł
0xB4 ´
0xB5 µ
0xB6 ¶
0xB7 ·
0xB8 ¸
0xB9 ą
0xBA ş
0xBB »
0xBC Ľ
0xBD ˝
0xBE ľ
0xBF ż
Hex
NZ - znak niezdefiniowany w kodowaniu
ZK znak kontrolny,
Znak znak wspólny dla obydwu kodowań.
ISO 88
59-2
ą
ľ
ś
ˇ
š
ť
ź
ž
Hex
0xC0
0xC1
0xC2
0xC3
0xC4
0xC5
0xC6
0xC7
0xC8
0xC9
0xCA
0xCB
0xCC
0xCD
0xCE
0xCF
0xD0
0xD1
0xD2
0xD3
0xD4
0xD5
0xD6
0xD7
0xD8
0xD9
0xDA
0xDB
0xDC
0xDD
0xDE
0xDF
CP
ISO
Hex
1250 8859-2
Ŕ
0xE0
Á
0xE1
Â
0xE2
Ă
0xE3
Ä
0xE4
Ĺ
0xE5
Ć
0xE6
Ç
0xE7
Č
0xE8
É
0xE9
Ę
0xEA
Ë
0xEB
Ě
0xEC
Í
0xED
Î
0xEE
Ď
0xEF
Đ
0xF0
Ń
0xF1
Ň
0xF2
Ó
0xF3
Ô
0xF4
Ő
0xF5
Ö
0xF6
×
0xF7
Ř
0xF8
Ů
0xF9
Ú
0xFA
Ű
0xFB
Ü
0xFC
Ý
0xFD
Ţ
0xFE
ß
0xFF
CP ISO
1250 8859-2
ŕ
á
â
ă
ä
ĺ
ć
ç
č
é
ę
ë
ě
í
î
ď
đ
ń
ň
ó
ô
ő
ö
÷
ř
ů
ú
ű
ü
ý
ţ
24˙
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ć 216=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 -
0xxxxxxx
0x80 do 0x7FF -
110xxxxx 10xxxxxx
0x800 do 0xFFFF -
1110xxxx 10xxxxxx 10xxxxxx
0x10000 do 0x1FFFFF -
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0x200000 do 0x3FFFFFF -
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
1
&
ø
Ø
é
/
É
a
j
~
£
A
J
÷
1
°
µ
¢
{
}
\
0
2
â
ê
Â
Ê
b
k
s
¥
B
K
S
2
3
ä
ë
Ä
Ë
c
l
t
·
C
L
T
3
4
à
è
À
È
d
m
u
©
D
M
U
4
5
á
í
Á
Í
e
n
v
§
E
N
V
5
6
ã
î
Ã
Î
f
o
w
¶
F
O
W
6
7
å
ï
Å
Ï
g
p
x
¼
G
P
X
7
8
ç
ì
Ç
Ì
h
q
y
½
H
Q
Y
8
9
ñ
ß
Ñ
`
i
r
z
¾
I
R
Z
9
A
[
]
¦
:
«
ª
¡
¬
¹
²
³
B
.
$
,
#
»
º
¿
|
ô
û
Ô
Û
C
<
*
%
@
ð
æ
Ð
¯
ö
ü
Ö
Ü
D
(
)
_
'
ý
¸
Ý
¨
ò
ù
Ò
Ù
E
+
;
>
=
þ
Æ
Þ
´
ó
ú
Ó
Ú
F
!
^
?
"
±
¤
®
×
õ
ÿ
Õ
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. 3 znaki na słowie 16 bitowym.
2. 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
space 0
1
2
3
4
5
6
001
7
8
9
A
B
C
D
E
010
F
G
H
I
J
K
L M
011
N
O
P
Q
R
S
T
U
100
V
W
X
Y
Z
.
$
%
37
Kod Radix-50
m. s. bits
000
001
010
011
100
000
space
H
P
X
2
PDP-11, VAX
Least significant bits
001 010 011 100 101
A
B
C
D
E
I
J
K
L
M
Q
R
S
T
U
Y
Z
$
.
%
3
4
5
6
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
Znak
A
B
C
D
E
F
G
H
I
J
K
Wart.
11
12
13
14
15
16
17
18
19
20
21
Znak
L
M
N
O
P
Q
R
S
T
U
V
Wart.
22
23
24
25
26
27
28
29
30
31
32
Znak
W
X
Y
Z
a
b
c
d
e
f
g
Wart.
33
34
35
36
37
38
39
40
41
42
43
Znak
h
i
j
k
l
m
n
o
p
q
r
Wart.
44
45
46
47
48
49
50
51
52
53
54
Znak
s
t
u
v
w
x
y
z
0
1
2
Wart.
55
56
57
58
59
60
61
62
63
Znak
3
4
5
6
7
8
9
+
/
pad
=
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

similar documents