Jak używać
- Wybierz „Koduj”, aby zamienić tekst na kod ósemkowy, lub „Dekoduj”, aby zamienić wartości ósemkowe z powrotem na tekst.
- Wpisz lub wklej dane wejściowe albo otwórz plik, aby przekonwertować jego bajty.
- Wybierz separator wyniku: „Spacja”, „Brak”, „Przecinek” lub „Nowy wiersz”.
- Skopiuj wynik lub pobierz go jako plik.
Czym jest system ósemkowy?
System ósemkowy, czyli Base8, zapisuje liczby cyframi od 0 do 7. Każda cyfra ósemkowa odpowiada dokładnie trzem bitom, dlatego system ten był popularny we wczesnych komputerach, których długość słowa była wielokrotnością trzech, takich jak 12-bitowy PDP-8 i 36-bitowy PDP-10. Dziś przetrwał głównie w sekwencjach ucieczki i w uprawnieniach plików w systemach Unix.
Bajt przechowuje wartość od 0 do 255, czyli od 0 do 377 w zapisie ósemkowym. Ten konwerter zapisuje każdy bajt wejścia jako dokładnie trzy cyfry ósemkowe z zerami wiodącymi, dzięki czemu wszystkie grupy mają tę samą szerokość i można je nawet połączyć bez separatora. Tekst jest najpierw zamieniany na bajty w wybranym kodowaniu tekstu: jeden bajt na znak w przypadku zwykłego ASCII, od dwóch do czterech bajtów na znak w przypadku innych pism w UTF-8.
Ósemkowe sekwencje ucieczki
C, C++, Python, Perl i polecenie printf w powłoce pozwalają zapisać bajt jako ukośnik wsteczny, po którym następują maksymalnie trzy cyfry ósemkowe: \101 to litera A, a \012 to znak nowego wiersza (line feed).
To narzędzie zwraca same cyfry, bez ukośników wstecznych. Aby zbudować ciąg ze znakami ucieczki, weź wynik rozdzielony spacjami, zastąp każdą spację ukośnikiem wstecznym i dodaj jeden ukośnik przed pierwszą grupą. Aby zdekodować sekwencje ucieczki, postąp odwrotnie i zastąp ukośniki wsteczne spacjami, ponieważ dekoder akceptuje tylko cyfry i separatory.
Uprawnienia plików, takie jak 755, również są zapisane ósemkowo, ale są to liczby, a nie tekst. Aby zamienić taką liczbę na system dwójkowy lub dziesiętny, użyj konwertera systemów liczbowych.
System ósemkowy w kodzie
# Python
' '.join(f'{b:03o}' for b in 'Hi'.encode()) # '110 151'
bytes(int(o, 8) for o in '110 151'.split()).decode() # 'Hi'
# Shell
printf '\110\151\n' # wypisuje Hi
printf 'Hi' | od -An -to1 # 110 151
Specyfikacja
| Alfabet | 0-7 |
|---|---|
| Rozmiar wyniku | 3 cyfry na bajt (300%) |
| Dopełnienie | Brak |
| Standard | Pozycyjny system ósemkowy |
| Rozróżnia wielkość liter | Nie |
Przykłady
| Wejście (UTF-8) | Wyjście |
|---|---|
Hello, World! | 110 145 154 154 157 054 040 127 157 162 154 144 041 |
Base64.is | 102 141 163 145 066 064 056 151 163 |
你好 | 344 275 240 345 245 275 |
Najczęściej zadawane pytania
Dlaczego każdy bajt ma trzy cyfry ósemkowe?
Największa wartość bajtu, 255, to 377 w zapisie ósemkowym, więc trzy cyfry zawsze wystarczą. Dopełnianie mniejszych wartości zerami wiodącymi sprawia, że każda grupa ma tę samą szerokość, i właśnie dzięki temu ciąg bez separatorów można z powrotem podzielić na bajty.
Jak zdekodować kod ósemkowy bez spacji?
Wklej cyfry jako jeden ciągły ciąg. Dekoder dzieli go na grupy po trzy cyfry, więc długość musi być wielokrotnością 3. Jeśli niektóre wartości mają mniej niż trzy cyfry, rozdziel je spacjami, przecinkami lub podziałami wierszy.
Dlaczego wartość taka jak 400 jest odrzucana?
Ósemkowe 400 to 256, a ta wartość nie mieści się w bajcie. Prawidłowe wartości bajtów mieszczą się w zakresie od 0 do 377, a dekoder zgłasza pozycję każdej grupy spoza tego zakresu. Cyfry 8 i 9 w ogóle nie są prawidłowymi cyframi ósemkowymi.
Czy można uzyskać wartości ósemkowe dla innego zestawu znaków?
Tak. Wybierz go w menu „Kodowanie tekstu”, na przykład Windows-1252 lub ISO-8859-1, aby uzyskać jeden bajt na znak zachodnioeuropejski (dla polskich znaków ISO-8859-2), albo GBK lub Shift_JIS dla tekstu chińskiego i japońskiego.