Por curiosidad, ¿cómo se convierte exactamente el código binario en letras? Sé que hay sitios que automáticamente convierten el binario en palabras para ti, pero quiero comprender los pasos intermedios específicos por los que pasa el código binario antes de convertirlos en letras.¿Cómo se convierte exactamente el código binario en letras?
Respuesta
Suponiendo que por "código binario" quiere decir simplemente datos antiguos (secuencias de bits o bytes), y que por "letras" se entiende caracteres, la respuesta es en dos pasos. Pero primero, algunos antecedentes.
- Un carácter es sólo un símbolo denominado como "Letra latina mayúscula A" o "PI LETRA GRIEGA" o "NEGRO Caballero del ajedrez". No confundas un personaje (símbolo abstracto) con un glifo (una imagen de un personaje).
- A conjunto de caracteres es un conjunto particular de caracteres, cada uno de los cuales está asociado a un número especial, llamado punto de código. Para ver las asignaciones de puntos de código en el conjunto de caracteres Unicode, consulte http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.
Bueno, ahora aquí son los dos pasos:
Los datos, si es textual, debe ir acompañada de alguna forma por una codificación carácter, algo así como UTF-8, Latin-1, US-ASCII, etc. Cada esquema de codificación de caracteres especifica en gran detalle cómo las secuencias de bytes se interpretan como puntos de código (y, a la inversa, cómo se codifican los puntos de código como secuencias de bytes).
Una vez que las secuencias de bytes se interpretan como puntos de código, tiene sus caracteres, porque cada carácter tiene un punto de código específico.
Un par de notas:
- En algunas codificaciones, ciertas secuencias de bytes que no correspondan a los puntos de código en absoluto, lo que puede tener errores de decodificación de caracteres.
- En algunos conjuntos de caracteres, hay puntos de código que no se utilizan, es decir, no corresponden a ningún carácter.
En otras palabras, no todas las secuencias de bytes significan algo como texto.
Respuesta muy esclarecedora. Contiene conocimiento importante, que se usará bien. –
http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/The_Characters.asp simplemente se ve aquí ... (no AQUÍ pero tiene una tabla).
Hay 8 bits en un byte. Un byte puede ser un símbolo. Un bit está activado o desactivado.
¿Se refiere a la conversión 011001100110111101101111
→ foo
, por ejemplo? Simplemente tome la secuencia binaria, divídala en bytes separados (01100110
, 01101111
, 01101111
) y busque el carácter ASCII que corresponde al número dado. Por ejemplo, 01100110
es 102 en decimal y el carácter ASCII con el código 102 es f
:
$ perl -E 'say 0b01100110'
102
$ perl -E 'say chr(102)'
f
(See what the chr
function does.) Se puede generalizar este algoritmo y tienen un número diferente de bits por carácter y diferentes codificaciones, los restos de punto lo mismo.
¿Por qué no hacer esto? Tomar 010010001001001 dividirlo en dos bits de 8 letras cada uno (01001000, 01001001). A continuación, emita los poderes
01001000. 01001001.
Los primeros 8 ignoran los tres primeros determinan si es o no el capital, el ir a la derecha a la izquierda poderes que hacen de 2 (2^1, 2^2^2 3 2^4 2^5). Entonces, sume todos, solo hay uno, e = 8, y la letra ocho en el alfabeto es h, entonces nuestro primer bit es la letra h, pruébelo en el otro bit
He aquí una forma de convertir números binarios para caracteres ASCII que a menudo son lo suficientemente simples como para hacer en tu cabeza.
1 - Convierte cada 4 dígitos binarios en un dígito hexadecimal.
Aquí hay una binario a tabla de conversión 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
(Los números hexadecimales A a F son los números decimales 10 a 15. Eso es lo hexadecimal, o "base 16" es - en lugar de cada dígito siendo capaz de representar 10 números diferentes [0 - 9], como decimales o "base 10", cada dígito es capaz de representar 16 números diferentes [0 - f].)
Una vez que sepa esa tabla, convirtiendo cualquier cadena de dígitos binarios en una cadena de dígitos hexadecimales es simple.
Por ejemplo,
01000100 = 0100 0100 = 44 hex
1010001001110011 = 1010 0010 0111 0011 = a273 hex
Bastante simple, ¿verdad? Es una simple cuestión convertir un número binario de cualquier longitud en su equivalente hexadecimal.
(Esto funciona porque hexadecimal es la base 16 y el binario es la base 2 y 16 es la 4ª potencia de 2, por lo que toma 4 dígitos binarios para hacer 1 dígito hexadecimal.10, por otro lado, no es un poder de 2, así que no podemos convertir binario a decimal casi tan fácilmente.)
2 - Divida la cadena de dígitos hexadecimales en pares.
Al convertir un número en ASCII, cada 2 dígitos hexadecimales es un carácter. Así que divide la cadena hexagonal en conjuntos de 2 dígitos.
Se podría dividir un número hexadecimal como 7340298b392 esto en 6 pares, como este:
7340298b392 = 07 34 02 98 b3 92
(Note que antepone un 0, ya que tenía un número impar de dígitos hexadecimales.)
Eso es 6 pares de dígitos hexadecimales, por lo que serán 6 letras. (Excepto que sé de inmediato que 98, B3 y 92 no son letras. Explicaré por qué en un minuto.)
3 - Convierta cada par de dígitos hexadecimales en un número decimal.
Haga esto multiplicando el (decimal equivalente al) dígito izquierdo por 16 y agregando el 2do.
Por ejemplo, b3 hex = 11 * 16 + 3, que es 110 + 66 + 3, que es 179. (b hex es 11 decimal.)
4 - Convierta los números decimales en caracteres ASCII.
Ahora, para obtener las letras ASCII para los números decimales, simplemente tenga en cuenta que en ASCII, 65 es una 'A' en mayúscula, y 97 es una 'a' en minúscula.
Entonces, ¿qué letra es 68?
68 es la cuarta letra del alfabeto en mayúsculas, ¿verdad?
65 = A, 66 = B, 67 = C, 68 = D.
Entonces 68 es 'D'.
Toma el número decimal, resta 64 para letras mayúsculas si el número es menor que 97, o 96 para letras minúsculas si el número es 97 o mayor, y ese es el número de la letra del alfabeto asociado con ese conjunto de 2 dígitos hexadecimales
Alternativamente, si usted no tiene miedo de un poco de aritmética fácil hexagonal, puede omitir el paso 3, y sólo tiene que ir directamente de hexadecimal a ASCII, recordando, por ejemplo, que
hex 41 = 'A'
hex 61 = 'a'
Reste 40 hex para letras mayúsculas o 60 hex para letras minúsculas, y convierta lo que queda a decimal para obtener el número de letra del alfabeto.
Por ejemplo
01101100 = 6c, 6c - 60 = c = 12 decimal = 'l'
01010010 = 52, 52 - 40 = 12 hex = 18 decimal = 'R'
(Al hacer esto, es útil recordar que 'm' (o 'M') es el 13 letra del alfabeto. Así que usted puede contar hacia arriba o hacia abajo del 13 al . encontrar una carta que está más cerca del centro que a cualquiera de los extremos)
vi esto en una camisa una vez, y fue capaz de leerlo en mi cabeza:
01000100
01000001
01000100
lo hice así:
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
La camisa decía "PAPÁ", que pensé que era genial, ya que estaba siendo comprada por una mujer embarazada. Su esposo debe ser un geek como yo.
¿Cómo sabía de inmediato que 92, b3 y 98 no eran letras?
Porque el código ASCII para una 'z' minúscula es 96 + 26 = 122, que en hex es 7a. 7a es el número hexadecimal más grande para una letra. Cualquier cosa más grande que 7a no es una letra.
Así es como puede hacerlo como ser humano.
¿Cómo lo hacen los programas de computadora?
Para cada conjunto de 8 dígitos binarios, conviértalo en un número y búsquelo en una tabla ASCII.
(Esa es una manera bastante obvia y directa. Un programador típico probablemente podría pensar en 10 o 15 formas más en el lapso de algunos minutos. Los detalles dependen del entorno de lenguaje de la computadora.)
gracias. Me resulta más fácil leer sin los dígitos hexadecimales, también ver el byte '01000100' como' 2^6 + 2^2' = 68 directamente. – Blauhirn
Interesante. Veamos, supongo que el dígito que está más a la derecha es 2^0, entonces 2^6 es el séptimo dígito del más a la derecha. 2^6 es ... 2,4,8,16,32,64 .. y 2^2 es 2 * 2 que es 4, entonces, correcto, eso sería 68. Los códigos Ascii tienen 8 bits de ancho, entonces adivina si conoces los poderes de 2 a 7 bits (ya que 01111010 es la letra más grande), ese método podría ser lo suficientemente práctico, aunque algo como 01011010 podría tomar más tiempo de esa manera que si solo conoces los dígitos hexadecimales a 4 bits; 0101 = 5, 1010 = A, entonces 5A. Convirtiendo a una letra: 0x5A - 0x40 (letras mayúsculas) = 0x1A = 16 + 10 = 26 (en letras mayúsculas) = 'Z'. – Shavais
Si realmente prefiere trabajar en decimal, creo que en realidad puede conocer los valores decimales en 4 bits, y para cada conjunto de 8 bits, multiplique el conjunto de la izquierda por 16 y agregue el 2 ° conjunto. Entonces 0101: 1010 = 5:10 = 5 * 16 + 10 = 50 + 30 + 10 = 90. Si sabes que 64 es el número decimal que restas para las letras mayúsculas, obtienes 26 ('Z') de esa manera. – Shavais
- 1. ¿Cómo se convierte una fracción a binaria?
- 2. ¿cómo se relaciona el código de operación de PHP con el código binario realmente ejecutado?
- 3. Mysql se convierte en '?
- 4. Dónde exactamente se ejecuta el código nativo NDK
- 5. ¿Cómo funcionan estos fragmentos de código exactamente?
- 6. ¿Cómo se convierte SYS_GUID() en varchar?
- 7. Ubuntu: Cómo vincular un código binario
- 8. ¿Cómo se convierte el tiempo de época en C#?
- 9. NavigateUrl = "#" se convierte en href = "SubFolder/#"?
- 10. ¿Se convierte cada programa de Objective C a código C?
- 11. ¿C++ se convierte en MSIL?
- 12. ¿Cómo se convierte una cadena en booleana en ActionScript?
- 13. ¿Cómo leer el archivo binario en C#?
- 14. ¿Dónde está exactamente renderizado el texto en el sistema operativo Android?
- 15. No se puede escribir un archivo binario
- 16. ¿Cómo se convierte cstring a NSString?
- 17. ¿Cómo se convierte LPCWSTR a const char *?
- 18. El complemento JQuery scrollTo se convierte en Jerky en iOS
- 19. ¿Cómo se ejecuta exactamente un script PHP?
- 20. código C, ¿por qué la dirección 0xFF00 se convierte en una estructura?
- 21. ¿Cómo se comporta exactamente el typedef de "referencia"?
- 22. Usando tortoiseSVN, ¿cómo se etiqueta el código?
- 23. ¿Cómo funciona el sistema() exactamente en Linux?
- 24. ¿Cuándo se refactoriza el código?
- 25. jQuery AJAX POST se convierte en GET
- 26. Convierte int64_t en el doble
- 27. Archivo de objeto a código binario
- 28. Django: ¿cómo se convierte InMemoryUploadedFile en FieldFile de ImageField?
- 29. ¿Cómo se convierte un NSUInteger en un NSString?
- 30. Abrir en plataforma Java SE binario
¿Qué quiere decir con código binario? ¿Quiere decir de un código ASCII a la letra correspondiente? – Giorgio