Como usar
- Escolha Codificar para converter texto em octal ou Decodificar para converter valores octais de volta em texto.
- Digite ou cole a entrada, ou abra um arquivo para converter os bytes dele.
- Selecione um separador para a saída: Espaço, Nenhum, Vírgula ou Nova linha.
- Copie o resultado ou baixe-o como arquivo.
O que é octal?
O octal, ou Base8, escreve números com os dígitos de 0 a 7. Cada dígito octal representa exatamente três bits, o que tornou o octal popular nos primeiros computadores cujo tamanho de palavra era múltiplo de três, como o PDP-8 de 12 bits e o PDP-10 de 36 bits. Hoje ele sobrevive principalmente em sequências de escape e nas permissões de arquivo do Unix.
Um byte guarda um valor de 0 a 255, que corresponde a 0 a 377 em octal. Este conversor escreve cada byte da entrada com exatamente três dígitos octais, com zeros à esquerda, para que todos os grupos tenham a mesma largura e possam até ser unidos sem separador. Primeiro o texto é transformado em bytes com a codificação de texto selecionada: um byte por caractere para ASCII puro e de dois a quatro bytes por caractere para outros sistemas de escrita em UTF-8.
Sequências de escape em octal
C, C++, Python, Perl e o printf do shell permitem escrever um byte como uma barra invertida seguida de até três dígitos octais: \101 é a letra A e \012 é uma quebra de linha (line feed).
Esta ferramenta gera apenas os dígitos, sem barras invertidas. Para montar uma string com escapes, use a saída separada por espaços, substitua cada espaço por uma barra invertida e acrescente uma antes do primeiro grupo. Para decodificar sequências de escape, faça o inverso e troque as barras invertidas por espaços, porque o decodificador aceita apenas dígitos e separadores.
Permissões de arquivo como 755 também são octais, mas são números, não texto. Para converter um número desses para binário ou decimal, use o conversor de bases numéricas.
Octal no código
# 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' # exibe Hi
printf 'Hi' | od -An -to1 # 110 151
Especificação
| Alfabeto | 0-7 |
|---|---|
| Tamanho da saída | 3 dígitos por byte (300%) |
| Preenchimento | Nenhum |
| Padrão | Octal posicional |
| Diferencia maiúsculas e minúsculas | Não |
Exemplos
| Entrada (UTF-8) | Saída |
|---|---|
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 |
Perguntas frequentes
Por que cada byte tem três dígitos octais?
O maior valor de um byte, 255, é 377 em octal, então três dígitos sempre bastam. Completar os valores menores com zeros à esquerda mantém todos os grupos com a mesma largura, e é isso que permite dividir de volta em bytes uma string sem separadores.
Como decodificar octal sem espaços?
Cole os dígitos como uma única string contínua. O decodificador a divide em grupos de três, então o comprimento precisa ser múltiplo de 3. Se alguns valores tiverem menos de três dígitos, separe-os com espaços, vírgulas ou quebras de linha.
Por que um valor como 400 é rejeitado?
O octal 400 é 256, que não cabe em um byte. Os valores de byte válidos vão de 0 a 377, e o decodificador informa a posição de qualquer grupo fora desse intervalo. Os dígitos 8 e 9 nem sequer são dígitos octais válidos.
Posso obter valores octais para outro conjunto de caracteres?
Sim. Escolha-o no menu Codificação de texto, por exemplo Windows-1252 ou ISO-8859-1 para ter um byte por caractere em idiomas da Europa Ocidental, ou GBK ou Shift_JIS para textos em chinês e japonês.