Slik bruker du verktøyet
- Velg Kode for å konvertere tekst til oktal, eller Dekode for å konvertere oktalverdier tilbake til tekst.
- Skriv eller lim inn inndataene, eller åpne en fil for å konvertere bytene i den.
- Velg Skilletegn for utdataene: Mellomrom, Ingen, Komma eller Linjeskift.
- Kopier resultatet eller last det ned som en fil.
Hva er oktal?
Oktal, eller Base8, skriver tall med sifrene 0 til 7. Hvert oktale siffer står for nøyaktig tre bit, og derfor var oktal populært på tidlige datamaskiner med ordlengder som var multipler av tre, for eksempel 12-bits PDP-8 og 36-bits PDP-10. I dag lever tallsystemet videre hovedsakelig i escape-sekvenser og i filrettigheter på Unix.
En byte har en verdi fra 0 til 255, som er 0 til 377 i oktal. Denne konverteren skriver hver byte i inndataene som nøyaktig tre oktale sifre med innledende nuller, slik at alle gruppene har samme bredde og til og med kan settes sammen uten skilletegn. Teksten gjøres først om til byte med den valgte tegnkodingen: én byte per tegn for ren ASCII, og to til fire byte per tegn for andre skriftsystemer i UTF-8.
Oktale escape-sekvenser
I C, C++, Python, Perl og skallets printf kan du skrive en byte som en omvendt skråstrek etterfulgt av opptil tre oktale sifre: \101 er bokstaven A, og \012 er et linjeskift (line feed).
Dette verktøyet skriver ut rene sifre uten omvendte skråstreker. For å lage en escapet streng tar du utdataene med mellomrom som skilletegn, erstatter hvert mellomrom med en omvendt skråstrek og setter en foran den første gruppen. For å dekode escape-sekvenser gjør du det motsatte og erstatter de omvendte skråstrekene med mellomrom, fordi dekoderen bare godtar sifre og skilletegn.
Filrettigheter som 755 er også oktale, men de er tall, ikke tekst. For å konvertere et slikt tall til binært eller desimalt bruker du tallsystemkonverteren.
Oktal i kode
# 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' # skriver ut Hi
printf 'Hi' | od -An -to1 # 110 151
Spesifikasjon
| Alfabet | 0-7 |
|---|---|
| Utdatastørrelse | 3 sifre per byte (300 %) |
| Utfylling | Ingen |
| Standard | Posisjonelt oktalt tallsystem |
| Skiller store og små bokstaver | Nei |
Eksempler
| Inndata (UTF-8) | Utdata |
|---|---|
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 |
Ofte stilte spørsmål
Hvorfor har hver byte tre oktale sifre?
Den største byteverdien, 255, er 377 i oktal, så tre sifre er alltid nok. Når mindre verdier fylles ut med innledende nuller, får alle gruppene samme bredde, og det er dette som gjør at en streng uten skilletegn kan deles opp i byte igjen.
Hvordan dekoder jeg oktal uten mellomrom?
Lim inn sifrene som én sammenhengende streng. Dekoderen deler den opp i grupper på tre, så lengden må være et multiplum av 3. Hvis noen verdier har færre enn tre sifre, skiller du dem i stedet med mellomrom, komma eller linjeskift.
Hvorfor blir en verdi som 400 avvist?
Oktal 400 er 256, som ikke får plass i én byte. Gyldige byteverdier går fra 0 til 377, og dekoderen oppgir posisjonen til alle grupper utenfor dette området. Sifrene 8 og 9 er ikke gyldige oktale sifre i det hele tatt.
Kan jeg få oktalverdier for et annet tegnsett?
Ja. Velg det under Tegnkoding, for eksempel Windows-1252 eller ISO-8859-1 for én byte per vesteuropeisk tegn, eller GBK eller Shift_JIS for kinesisk og japansk tekst.