Base85

Z testwiki
Wersja z dnia 22:30, 13 cze 2024 autorstwa imported>MalarzBOT (MalarzBOT: likwiduję Błędy składniowe: Przestarzałe znaczniki HTML)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania

Base85 (inne nazwy Ascii85, Z85) – rodzaj kodowania transportowego umożliwiającego przekazywanie binarnych danych w środowisku, w którym dopuszczalne jest używanie jedynie znaków ASCIISzablon:Odn.

Opis działania

Strumień danych dzielony jest na bloki podlegające transformacji. W dziedzinie danych binarnych rozmiar bloku to cztery bajty (b1 b2 b3 b4). Po stronie ASCII odpowiada im pięć znaków (c1 c2 c3 c4 c5). Oba zestawy łączy następująca relacjaSzablon:Odn:

b1×2563+b2×2562+b3×256+b4=c1×854+c2×853+c3×852+c4×85+c5.

Proces konwersji wykorzystuje pozycyjny system liczbowy o podstawie 85 do reprezentacji liczb zapisanych na 32 bitachSzablon:Odn. Liczby trzydziestodwubitowe można traktować jak czterocyfrowe w systemie o podstawie 256Szablon:Odn.

Proces translacji z dziedziny binarnej jest jednoznaczny dzięki relacjiSzablon:Odn:

855>232[uwaga 1].

ASCII zawiera 95 znaków drukowalnych (wliczając w to odstęp). Do reprezentacji cyfr wykorzystuje się z niego podzbiór 85 znakówSzablon:Odn.

Podstawowa funkcja konwertująca wymaga na wejściu liczb trzydziestodwubitowych. Oznacza to, że strumień danych binarnych powinien mieć całkowitą liczbę bajtów podzielną przez cztery. Sposób obsługi przypadków nie spełniających tego warunku zależy od implementacji. Jednym z rozwiązań jest dodanie brakujących bajtów o wartości zero do ostatniego blokuSzablon:Odn i skrócenie wyniku o tyle cyfr ile bajtów zostało dodanychSzablon:Odn[uwaga 2].

Własności

  • Rozmiar danych binarnych do zakodowanych pozostaje w stosunku 4:5Szablon:Odn, czyli kodowanie zwiększa objętość o 25%Szablon:Odn. Daje to przewagę nad alternatywnym kodowaniem 7-bitowym. Na przykład base16 zwiększa rozmiar w stosunku 1:2Szablon:Odn, natomiast base64 zamienia 24 bity na 4 znakiSzablon:Odn (stosunek 3:4, czyli wzrost objętości o 33%).
  • Podstawa o wartości 85 jest wielkością minimalną aby umożliwić prezentację każdej liczby trzydziestodwubitowej za pomocą pięciu cyfr[uwaga 3]. Możliwe jest użycie wszystkich 94 znaków ASCII, nie zmienia to jednak minimalnej liczby cyfr potrzebnej do zakodowania informacjiSzablon:Odn. Stosowanie minimalnej bazy pozwala na użycie pozostałych znaków do innych celówSzablon:Odn.
  • Algorytmu nie można poddać optymalizacji polegającej na zdefiniowaniu predefiniowanych tablic mapujących wybrane grupy bitów na odpowiadające im znaki, co jest na przykład osiągalne dla base64Szablon:Odn.

Warianty

Różnice między istniejącymi wariantami polegają głównie na odpowiednim skojarzeniu znaków z wartościami cyfr w systemie o podstawie 85.

btoa

Program Szablon:Tt w systemie Unix przydziela cyfrom kolejne kody ASCII począwszy od znaku Szablon:Tt dla cyfry o wartości 0 i kończywszy na znaku Szablon:Tt dla cyfry o wartości 84Szablon:Odn. Znak Szablon:Tt oznacza koniec zakodowanych danych, Szablon:Tt jest skrótem oznaczającym cztery bajty o wartości zeroSzablon:Odn. Nowsza wersja programu dodała również znak Szablon:Tt, który oznacza cztery bajty o wartości 32 (cztery spacje)Szablon:Odn.

PostScript

Implementacja Adobe Inc. na potrzeby języka PostScript wykorzystuje zestaw znaków od Szablon:Tt do Szablon:Tt dla cyfr od 0 do 84 oraz stosuje skrót Szablon:Tt na oznaczenie czterech bajtów o wartości zero. Symbolem końca danych jest sekwencja Szablon:TtSzablon:Odn. Kodowanie to jest określane nazwą ASCII85Szablon:Odn.

Z85

Standard umożliwiający łatwe użycie kodowania bezpośrednio w kodzie źródłowym stosuje następującą kolejność znaków Szablon:TtSzablon:Tt, Szablon:TtSzablon:Tt, Szablon:TtSzablon:Tt, Szablon:TtSzablon:Odn. Można go używać w pojedynczych lub podwójnych cudzysłowach oraz przekazywać w linii poleceń. Umieszczenie znaku Szablon:Tt jako reprezentacji cyfry 0 ułatwia naoczne wyszukiwanie zer binarnychSzablon:Odn.

RFC 1924

Primaaprilisowa specyfikacja z propozycją zwartego zapisu adresów w sieci IPv6 zaleca następującą kolejność znaków dla cyfr o podstawie 85: Szablon:TtSzablon:Tt, Szablon:TtSzablon:Tt, Szablon:TtSzablon:Tt, Szablon:TtSzablon:Odn.

Wykluczenie Szablon:Tt i Szablon:Tt upraszcza cytowanie, a brak Szablon:Tt i Szablon:Tt umożliwia tworzenie list i zapis w zdaniu. Znaki Szablon:Tt mają już zarezerwowane znaczenie w CIDR i IPv6 stąd również nie są używane w kodowaniu. Natomiast znak Szablon:Tt mógłby powodować problemy w niektórych środowiskach, gdyż jest często używany do podawania sekwencji specjalnychSzablon:Odn.

Dodatkową różnicą względem pozostałych wariantów jest brak dzielenia danych na czterobajtowe bloki. Specyfikacja omawia kodowanie w konteście adresów IPv6, które mają rozmiar 128 bitów i traktowane są w całości jako liczby całkowite w celu przekształcenia ich na zakodowaną 20 znakową postaćSzablon:Odn. W ogólnym przypadku taki zapis adresu jest znacząco krótszy niż format standardowy lub skompresowanySzablon:Odn.

Zestaw znaków z tej specyfikacji używany jest przez system kontroli wersji git do generowania łat z danych binarnych[1][2].

XML

Nie ma oficjalnego standardu dla efektywnego kodowania w dokumentach XML. Paul Kwiatkowski zaproponował następujący zestaw: Szablon:TtSzablon:Tt, Szablon:TtSzablon:Tt, Szablon:TtSzablon:Tt, Szablon:TtSzablon:Odn. Jednak pozostał on jedynie w fazie propozycji jako INTERNET-DRAFT.

Zestaw unika znaków Szablon:Tt, które muszą być zamieniane na sekwencje specjalne w niektórych przypadkach w kodzie XMLSzablon:Odn. Ponadto wykluczone są Szablon:Tt, które również mogłyby stanowić problemy w innych środowiskachSzablon:Odn.

Znak Szablon:Tt ma podwójną funkcję. Reprezentuje cyfrę 83 i na podobieństwo z programem Szablon:Tt grupę czterech bajtów o wartości zero. Cyfra o wartości 83 nigdy nie wystąpi na pierwszej pozycji, a to umożliwia jej równoległe zastosowanie do tego celuSzablon:Odn.

Najmniej znacząca cyfra jest kodowana w systemie liczbowym o podstawie 84. Umożliwia to przypisanie ostatnim cyfrom kodowanym przez Szablon:Tt drugiej funkcji oznaczającej wyrównanie długości blokuSzablon:Odn.

Zestawienie znaków do kodowania

Wartość Szablon:TtSzablon:Odn Ascii85Szablon:Odn Z85Szablon:Odn RFC 1924Szablon:Odn XMLSzablon:Odn
0 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
1 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
2 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
3 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
4 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
5 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
6 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
7 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
8 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
9 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
10 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
11 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
12 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
13 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
14 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
15 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
16 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
17 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
18 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
19 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
20 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
21 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
22 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
23 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
24 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
25 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
26 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
27 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
28 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
29 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
30 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
31 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
32 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
33 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
34 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
35 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
36 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
37 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
38 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
39 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
40 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
41 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
42 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
43 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
44 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
45 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
46 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
47 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
48 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
49 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
50 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
51 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
52 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
53 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
54 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
55 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
56 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
57 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
58 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
59 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
60 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
61 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
62 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
63 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
64 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
65 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
66 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
67 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
68 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
69 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
70 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
71 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
72 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
73 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
74 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
75 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
76 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
77 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
78 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
79 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
80 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
81 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
82 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
83 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
84 Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt Szablon:Tt
Szablon:Sortkey cztery zera Szablon:Tt Szablon:Tt Szablon:TtSzablon:Odn
Szablon:Sortkey cztery spacje Szablon:Tt
Szablon:Sortkey koniec Szablon:Tt Szablon:Tt

Uwagi

Szablon:Uwagi

Przypisy

Szablon:Przypisy

Bibliografia

Linki zewnętrzne


Błąd rozszerzenia cite: Istnieje znacznik <ref> dla grupy o nazwie „uwaga”, ale nie odnaleziono odpowiedniego znacznika <references group="uwaga"/>