Como é que o código binário é convertido em letras?

Só por curiosidade, como é que o código binário é convertido em letras? Eu sei que existem sites que automaticamente convertem binário em palavras para você, mas eu quero entender os passos específicos e intermediários que o código binário passa antes de ser convertido em letras.

 24
Author: user701510, 2011-07-26

6 answers

Assumindo que por "código binário" você quer dizer apenas dados antigos (sequências de bits, ou bytes), e que por "letras" Você quer dizer caracteres, a resposta está em dois passos. Mas primeiro, alguns antecedentes.

  • um personagem é apenas um símbolo nomeado, como "letra maiúscula latina A" ou "letra grega pequena PI" ou "cavaleiro negro de xadrez". Não confunda um carácter (símbolo abstracto) com um glifo (uma imagem de um carácter).
  • a Conjunto de caracteres é um conjunto particular de caracteres, cada um dos quais está associado com um número especial, chamado seu codepoint. Para ver os mapeamentos de pontos do código no conjunto de caracteres Unicode, veja http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.
Aqui estão os dois passos:
  1. Os dados, se forem textuais, devem ser acompanhados de alguma forma por uma codificação de caracteres , algo como UTF-8, Latin-1, US-ASCII, etc. Cada esquema de codificação de caracteres especifica em grande detalhe como o 'byte' sequências são interpretadas como codepoints (e inversamente como codepoints são codificados como sequências de bytes).

  2. Uma vez que as sequências de bytes são interpretadas como codepoints, você tem seus personagens, porque cada personagem tem um codepoint específico.

Algumas notas:

  • em algumas codificações, certas sequências de bytes correspondem a nenhum codeponto, de modo que você pode ter erros de descodificação de caracteres.
  • em alguns conjuntos de caracteres, existem pontos de código que são não utilizados, ou seja, não correspondem a nenhum caráter.
Por outras palavras, nem todas as sequências de bytes significam algo como texto.
 20
Author: Ray Toal, 2011-07-26 07:27:19
Aqui está uma maneira de converter números binários em caracteres ASCII que é bastante simples de fazer na sua cabeça.

1 - Converter cada 4 dígitos binários em um dígito hexadecimal.

Aqui está um gráfico de conversão binário para hex:
0001 = 1 
0010 = 2 
0011 = 3 
0100 = 4 
0101 = 5
0110 = 6
0111 = 7
1000 = 8

1001 = 9
1010 = a (the hex number a, not the letter a)
1011 = b
1100 = c
1101 = d
1110 = e
1111 = f

(os números hexadecimais a A F são os números decimais 10 a 15. Isso é o que é hexadecimal, ou "base 16" - em vez de cada dígito ser capaz de representar 10 números diferentes[ 0-9], como decimal ou "base 10" faz, cada dígito é capaz de representar 16 números diferentes [0 - f].)

Uma vez que você conheça esse gráfico, converter qualquer cadeia de dígitos binários em uma cadeia de dígitos hex é simples.

Por exemplo,

01000100 = 0100 0100 = 44 hex
1010001001110011 = 1010 0010 0111 0011 = a273 hex
É bastante simples, não é? É uma matéria simples converter um número binário de qualquer comprimento em seu equivalente hexadecimal.

(isto funciona porque o hexadecimal é a base 16 e o binário é a base 2 e 16 é a quarta potência de 2, por isso são precisos 4 dígitos binários para fazer 1 Hex digit. 10, por outro lado, não é uma potência de 2, por isso não podemos converter binário em decimal quase tão facilmente.)

2 - divide a cadeia de dígitos hex em pares.

Ao converter um número em ASCII, cada 2 dígitos hexadecimais é um carácter. Então, quebre a corda hex em conjuntos de 2 dígitos.

Você dividiria um número hex como 7340298b392 em 6 pares, assim:

7340298b392 = 07 34 02 98 b3 92

(Notice I prepended a 0, since I had an odd number of hex algarismo.)

São 6 pares de dígitos hex, por isso vão ser 6 Letras. (Só que sei logo que 98, b3 e 92 não são cartas. Já explico porquê.)

3 - converter cada par de dígitos hex em um número decimal.

Faça isso multiplicando o (equivalente decimal do) dígito esquerdo por 16, e adicionando o segundo.

Por exemplo, b3 hex = 11*16 + 3, que é 110 + 66 + 3, que é 179. (B hex é 11 casas decimais.)

4 - converter o números decimais em caracteres ASCII.

Agora, para obter as letras ASCII para os números decimais, basta ter em mente que em ASCII, 65 é uma maiúscula 'A', e 97 é uma minúscula 'a'.

Então que carta é 68? 68 é a quarta letra do alfabeto em maiúsculas, certo?
65 = A, 66 = B, 67 = C, 68 = D. Então 68 é "D".

Você toma o número decimal, subtrai 64 para letras maiúsculas se o número for inferior a 97, ou 96 para letras minúsculas se o número é 97 ou maior, e esse é o número da letra do alfabeto associado com esse conjunto de 2 dígitos hexadecimais.


Alternativamente, se você não tem medo de um pouco de aritmética de hex fácil, você pode saltar o Passo 3, e apenas ir direto de hex para ASCII, lembrando, por exemplo, que

hex 41 = 'A' 
hex 61 = 'a'

Então subtrai 40 hex para letras maiúsculas ou 60 hex para letras minúsculas, e converte o que resta às casas decimais para obter o número da letra do alfabeto.

Por exemplo

01101100 = 6c, 6c - 60 = c = 12 decimal = 'l'
01010010 = 52, 52 - 40 = 12 hex = 18 decimal = 'R'

(ao fazer isso, é útil lembrar que 'm' (ou 'M') é a 13 letra do alfabeto. Então você pode contar para cima ou para baixo a partir de 13 para encontrar uma carta que está mais perto do meio do que para qualquer um dos fins.)

Uma vez vi isto numa camisa e consegui lê-lo na minha cabeça.
01000100
01000001
01000100
Fiz assim:
01000100 = 0100 0100 = 44 hex, - 40 hex = ucase letter 4 = D
01000001 = 0100 0001 = 41 hex, - 40 hex = ucase letter 1 = A
01000100 = 0100 0100 = 44 hex, - 40 hex = ucase letter 4 = D
A camisa dizia "Pai", o que achei Fixe, Já que estava a ser comprada por uma mulher grávida. O marido dela deve ser um cromo. me.
Como é que eu soube logo que 92, b3 e 98 não eram cartas?

Porque o código ASCII para um minúsculo 'z' é 96 + 26 = 122, que em hex é 7a. 7a é o maior número hex para uma letra. Qualquer coisa maior que 7a não é uma carta.


Então é assim que se pode fazer como humano. Como fazem os programas de computador?

Para cada conjunto de 8 dígitos binários, converta - o para um número, e procure-o numa tabela ASCII.

Isso é muito bonito. óbvio e em frente. Um programador típico poderia provavelmente pensar em 10 ou 15 outras maneiras no espaço de alguns minutos. Os detalhes dependem do ambiente de linguagem de computador.)
 18
Author: Shavais, 2017-07-09 17:13:01

Queres dizer a conversão 011001100110111101101111foo, por exemplo? Basta pegar no fluxo binário, dividi - lo em bytes separados (01100110, 01101111, 01101111) e procure o carácter ASCII que corresponde a um dado número. Por exemplo, 01100110 é 102 em decimal e o carácter ASCII com o código 102 é f:

$ perl -E 'say 0b01100110'
102
$ perl -E 'say chr(102)'
f

(Veja o que a função chr faz .) Você pode generalizar este algoritmo e ter um número diferente de bits por caractere e codificações diferentes, o a questão continua a ser a mesma.

 7
Author: zoul, 2011-07-26 07:27:09

Http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/The_Characters.asp olha para aqui... (não aqui, mas tem uma mesa).

Há 8 bits num byte. Um byte pode ser um símbolo. Um pouco Está ligado ou desligado.
 0
Author: U4iK_HaZe, 2011-07-26 07:18:55

Porque não fazer esta tomada 010010001001001 dividi-a em duas letras de 8 bits cada (01001000, 01001001). Em seguida, emitir os poderes

01001000. 01001001.

Os primeiros 8 ignoram os primeiros três, eles determinam se é capital ou não, a direita para a esquerda fazendo poderes de 2 (2^1, 2^2 2^3 2^4 2^5). Então, adicione todos os outros, há apenas um, e ele = 8, e te oito letra no alfabeto é h então o nosso primeiro bit é a letra h, experimente no outro bit
 0
Author: Hunter, 2016-04-15 15:10:58

Para ler caracteres ASCII binários com grande velocidade utilizando apenas a sua cabeça:

As letras começam com os bits 1. O Bit 3 Está ligado (1) para minúsculas, desligado (0) para maiúsculas. Scan the following bits 4-8 for the first that is on, and select the starting letter from the same index in this string: "PHDBA" (think P. H. D., Bachelors in Arts). Por exemplo, 1xxxx = P, 01xxx = H, etc. Em seguida, converter os bits restantes para um valor inteiro (por exemplo, 010 = 2), e contar que muitas letras para cima a partir do seu início carta. Por exemplo, 01001010 = > H+2 = J.

 0
Author: Edward Anderson, 2018-09-27 17:26:28