¿Cómo convierte un programa de computadora diferentes tipos de datos como imágenes o archivos de texto en datos binarios?

Cualquier cosa que desee representar en una computadora, necesita encontrar una forma de convertirla en números. Este proceso de conversión a veces es completamente fiel, lo que significa que puede recuperar el objeto original con precisión de los números, o puede ser una aproximación. En el último caso, la representación digital de su objeto original está incompleta de alguna manera, y el truco es hacerlo lo suficientemente cerca en las áreas que importan , es decir, lo suficientemente cerca como para que, en circunstancias normales, apenas podamos notar la diferencia, o De ningún modo.

Texto

Los archivos de texto son un ejemplo simple de un objeto que generalmente se puede representar fielmente. Un archivo de texto es solo una secuencia de letras en algún idioma y otros caracteres (espacios, signos de puntuación, quizás algunos caracteres especiales). El primer orden del día es acordar, de una vez por todas, una representación numérica para esos caracteres: qué número usamos para representar ‘A’, qué representa ‘j’, cuál es el número para el espacio ”, etc.

Uno de los esquemas más comunes se llama ASCII. Esta es solo una tabla simple que enumera 256 caracteres más o menos útiles, incluido el alfabeto inglés, los dígitos 0-9, símbolos como ‘@’ o ‘=’ y así sucesivamente. La mayoría de los archivos de texto en realidad utilizan mucho menos de 256 símbolos diferentes, y ASCII se usa principalmente para los valores entre 0 y 127.

Por ejemplo, en ASCII, ‘A’ es 65, ‘B’ es 66, ‘C’ es 67 y así sucesivamente. Las letras minúsculas comienzan en ‘a’ (97) y terminan en ‘z’ (122). Los dígitos del 0 al 9 abarcan los números del 48 al 57. El espacio es 32. Un salto de línea
me gusta
estas
en realidad está representado por dos símbolos en ASCII, uno llamado “avance de línea” o LF (10) y uno llamado “retorno de carro” CR (13). Este es un traspaso de los viejos sistemas de máquinas de escribir y es una molestia bien conocida cuando se trata de archivos de texto; algunos sistemas insisten en tener un combo CR / LF en cualquier salto de línea, otros no, y sobreviene la hilaridad.

De todos modos, si tiene un archivo de texto y desea codificarlo en datos binarios, primero lo escanea de principio a fin, convirtiendo cada carácter en su código ASCII. Ahora tienes una secuencia de números; cada uno de esos números no toma más de 3 dígitos decimales para escribir (como 122), y si lo escribe en la base 2 en lugar de la base 10 (que es lo que significa “binario”) necesita como máximo 8 dígitos (llamados “bits” ) Por lo tanto, cada carácter en un archivo de texto requiere 8 bits. A los informáticos les gusta la uniformidad, por lo que todos los números se representan utilizando los 8 bits, incluso aquellos que podrían escribirse con menos. Por ejemplo, CR es 13, que en binario es 1101 (ocho más cuatro más (omita la columna de dos, entonces cero) más uno), pero cuando almacenamos un archivo de texto, almacenamos este carácter como 00001101. Esto es como lo habíamos usado 013 en lugar de 13 para la representación decimal. La ventaja es que no necesita tener ningún tipo de separador entre los números: cada 8 bits es un número, y luego viene el siguiente.

Un breve texto como ‘Quora’ se convierte en la secuencia 81, 117, 111, 114, 97 que en binario es 0101000101110101011011110111001001100001. Así que aquí hay una codificación binaria de un pequeño archivo de texto.

Por supuesto, una vez que amplíe el alcance de los “archivos de texto” para cubrir cosas con una mayor variedad de caracteres, tamaños de letras, tablas y demás, necesitará esquemas de representación más elaborados. Detengámonos aquí por ahora y pasemos a objetos más emocionantes.

Imágenes

Las imágenes comienzan como objetos físicos en nuestro mundo físico: patrones de color y luz que golpean nuestras retinas. El primer orden del día es capturar esos patrones de alguna manera, que es lo que hacen las cámaras. Las cámaras “analógicas” más antiguas capturan la luz y la imprimen en varios tipos de película; Las cámaras “digitales” más nuevas emplean convertidores A / D en el cuerpo de la cámara para transformar la señal de color de la vida real en números.

La forma en que esto sucede es, más o menos, esto. Imagine que su campo de visión se divide en una cuadrícula fina de pequeños cuadrados.


Cada pequeño cuadrado en la cuadrícula tiene un color que es más o menos uniforme en todo el cuadrado. Cuanto más pequeños son los cuadrados, más preciso es esto. Si los cuadrados son grandes, es posible que vea un cambio de oscuro a claro o de rojo a rojo más claro dentro de un cuadrado , por lo que si alguien le pregunta “¿cuál es el color en ese cuadrado”, sería muy difícil dar un definitivo responder. Pero si la cuadrícula es muy fina, la mayoría de las veces un cuadrado estará lo suficientemente cerca como para tener un solo color; de hecho, si reemplaza la imagen real con una en la que cada cuadrado tiene exactamente ese color , una persona no podrá notar la diferencia.

Esta manzana no es realmente una manzana: es solo una matriz de 256 filas y 256 columnas de pequeños cuadrados, y cada cuadrado tiene un color específico y uniforme. ¿Puedes ver los cuadrados pequeños? En realidad no, pero si hubiéramos usado una grilla mucho más gruesa, habríamos obtenido algo como esto:

Esto se parece mucho menos a una manzana y mucho más a una serie de cuadrados. Llamamos a esos cuadrados “píxeles”, por “elementos de imagen”.

Okay. Así que ahora tenemos muchos píxeles y cada píxel tiene un color. Necesitamos representar cada píxel como un número (o unos pocos números), y luego podemos almacenar esos números como bits tal como lo hicimos antes.

Hay varias formas de hacerlo. Una forma común usa un esquema de color que se basa en Rojo, Verde y Azul, y mide la cantidad de cada uno en cada cuadrado (esto se hace con filtros de color, después de lo cual la intensidad de la luz se captura con un sensor). Cada color se mide en una escala de 0 a 255, digamos (que es de 8 bits), por lo que obtienes 24 bits en total por cada píxel. Una vez que haya hecho esto, tiene una matriz de números de 24 bits en lugar de una matriz de cuadrados. Organiza esos números en secuencia, agrega información adicional para explicar cómo está estructurado el archivo (por ejemplo, cuántas filas y cuántas columnas tiene), y eso es todo.

El proceso de convertir la imagen original en números puede verse como una secuencia de “muestreo” o “hacer algo discreto”. (“Discreto” significa que tiene un número definido de valores posibles, en lugar de un continuo de infinitos). Dividimos la imagen tanto horizontal como verticalmente en tiras y píxeles, y luego dividimos el “espacio de color” en un número finito de valores posibles. Este proceso de muestreo es lo que está detrás de la mayoría de los esquemas de conversión de analógico a digital.

En la práctica, la mayoría de los formatos de archivo de imagen emplean un paso adicional llamado compresión . La razón es esta: la imagen de manzana relativamente pequeña con la que comenzamos tiene 256 x 256 = 65,536 píxeles. Cada píxel de este tipo necesita 24 bits, por lo que solo esta manzana requeriría 1.572.864 bits. Eso es bastante, si piensa en la cantidad de fotos que tiene en su computadora o cuenta de Facebook. Por lo tanto, nos corresponde encontrar formas de usar menos bits por imagen, y esto se logra mediante la compresión. Los archivos JPEG, GIF y PNG utilizan varios esquemas de compresión. Esa es otra lata de gusanos que deberíamos guardar para una respuesta por separado.

Audio y musica

Nuestra percepción de audio se basa en detectar cambios en la presión del aire dentro de nuestros oídos. Tenemos dos oídos, así que escuchamos cosas en “estéreo”; El problema principal aquí es cómo representar lo que escuchamos en un oído (un archivo “mono”) y luego podemos cuidar nuestros dos oídos simplemente usando dos de estas representaciones.

Una señal de audio (en un oído) es, por lo tanto, simplemente “presión de aire en función del tiempo”. Un micrófono convierte esas presiones cambiantes en una señal eléctrica analógica, y ahora necesitamos convertir esas señales analógicas en, como siempre, una secuencia de números. Necesitamos, nuevamente, probar.

Una buena forma de visualizar el proceso es así:


Tenemos una señal que varía continuamente (presión de tiempo o corriente eléctrica), representada aquí como un gráfico con el tiempo que fluye hacia la derecha y la magnitud aumenta. Ahora dividimos el tiempo en una secuencia finita pero densa de puntos de muestra, y en cada punto tomamos una lectura de la magnitud y almacenamos su valor, aproximadamente, como un número.

La rapidez con la que tomamos muestras se llama frecuencia de muestreo. Una frecuencia de muestreo típica para las señales de audio es de 48,000 muestras por segundo (44,100 era el estándar para los CD de audio). ¿Por qué 48,000 y no 100 o 1,000,000? Bueno, los humanos escuchan frecuencias de sonido de hasta 20 kHz, que es cuando la presión del aire vibra 20,000 veces por segundo (la mayoría de las personas son menos sensibles, pero es bueno estar a salvo). Resulta que si desea atrapar algo que sube y baja X veces por segundo, es mejor que lo muestree a 2X veces por segundo. Esto es algo intuitivo: si solo muestreara a X veces por segundo, siempre captaría la señal en su punto máximo o mínimo y ni siquiera notaría que está oscilando. Matemáticamente esto se conoce como el teorema de Nyquist-Shannon.

Entonces, tomamos muestras 48,000 veces por segundo. El rango vertical de magnitudes se muestrea en 256 niveles (8 bits) o 65536 niveles (16 bits) o, más exactamente, alrededor de 16 millones de niveles (24 bits). Para cada punto de muestra ahora tenemos un número, y toda la señal de audio no es más que una secuencia de números. Tome dos secuencias para una señal estéreo (o más para una señal espacial, como a veces hacemos en los sistemas de cine en casa), conviértalas en binario, agregue metadatos para delinear la estructura del archivo y listo.

Una vez más, la compresión se usa a menudo para hacer que los archivos sean más manejables: los archivos mp3, por ejemplo, usan un esquema de compresión común.

Vídeo

La pista de audio de una película o clip de YouTube es un archivo de audio, que hemos cubierto, así que concentrémonos en la parte de “imagen en movimiento” (estoy suprimiendo por ahora el problema complicado de sincronizar el video con el audio. Confía en mí , es complicado. Google “drop frame” o “29.97” para los detalles sangrientos).

A estas alturas ya ha aprendido el muestreo, por lo que puede adivinar lo que sucederá después: un video es solo una imagen con una dimensión de tiempo adicional. En el mundo físico, el tiempo es continuo, pero para el beneficio de nuestra computadora necesitamos muestrear el tiempo, al igual que lo hicimos con el audio.

Entonces tomamos nuestras imágenes en movimiento tal como se ven a través de la cámara de video, y las tomamos de vez en cuando. ¿Con que frecuencia? Resulta que a este respecto, nuestros ojos son mucho menos delicados que nuestros oídos. Capturar una imagen fija 20-30 veces por segundo y luego reproducirla al mismo ritmo produce una ilusión bastante convincente de movimiento continuo. Esto fue conocido por los primeros cineastas, aunque para ahorrar desorden a veces optaron por velocidades aún más lentas (los hermanos Lumière lograron 16 cuadros por segundo).

Los formatos de video modernos y populares capturan imágenes a 24 fps o 30 fps (fps = cuadros por segundo). Su HDTV funciona a 50 o 60 fps, que es un poco más del mínimo necesario, pero ayuda a crear imágenes aún más fluidas y nítidas (nota al margen: el hecho de que existen múltiples estándares para la velocidad de cuadros, incluyendo 24 fps, 25 fps, 29.97 fps, 30 fps , 60 fps y otros es otra fuente de problemas graves: volver a muestrear uno de estos en otro es un desastre terrible).

Por lo tanto, los conceptos básicos son simples: captura muchas imágenes a una velocidad suficientemente alta, convierte cada imagen en números como se mencionó anteriormente, agrega los metadatos necesarios y tienes tu archivo de video.

Los archivos de video brindan la oportunidad de discutir otro matiz genial: el formato de archivo puede dejar espacio para que el codificador tome decisiones inteligentes. Así es como funciona con archivos de video.

¿Recuerdas cómo dijimos que los archivos de imagen pueden necesitar ser comprimidos? Obviamente, el video nos proporciona una amplia motivación para comprimir aún más diligentemente. Hagamos los cálculos para una definición estándar, película de 90 minutos:

  • 90 minutos
  • 60 segundos por minuto
  • 30 cuadros por segundo
  • 480 filas por imagen
  • 640 píxeles por fila
  • 3 bytes (24 bits) por píxel

Sin comprimir, esto ocuparía 150 gigabytes (GB) de espacio en disco, y eso es solo def estándar; vaya a HD y verá 8 veces eso (filas dobles, columnas dobles y fps dobles). No va a volar más de un terabyte por película, y ni siquiera consideramos la parte de audio.

Ya hemos mencionado que las imágenes individuales se pueden comprimir, pero para el video podemos (y necesitamos) hacerlo mejor. Debe quedar claro que la mayoría de los cuadros en un video son muy similares a los que aparecieron justo antes. De vez en cuando habrá un “corte” donde el cuadro cambia completamente, pero la mayoría de las veces, lo que ves frente a ti es muy similar a lo que ves 1/30 de segundo después.

¿Cómo podemos utilizar esto? Un enfoque que describiré más o menos (esta respuesta es lo suficientemente larga) es buscar bloques dentro del cuadro N + 1 que sean casi idénticos a los del cuadro N, solo se movieron un poco (piense en un disparo panorámico o una imagen fija). Habitación con algunas personas caminando). Luego, el cuadro N se almacena en su totalidad, pero el cuadro N + 1 almacena solo las ubicaciones de los bloques, los desplazamientos verticales y horizontales de cada bloque y los cambios en el bloque, que son en su mayoría ceros. Los fragmentos de dígitos que en su mayoría son 0 se pueden comprimir de manera eficiente, por lo que el cuadro N + 1 ocupará mucho menos espacio de lo que hubiera sido de otra manera.

Lo que esto significa es que el formato de archivo necesita especificar cómo se organizan esos bloques, cómo se almacenan los turnos, etc., pero no dice nada sobre cómo comprimir realmente. Un codificador de video tonto simplemente no puede usar esta función en absoluto, o usarla solo en raras ocasiones, y eso produce un archivo de video perfectamente válido, aunque sea muy grande. Un codificador más inteligente trabajaría duro para optimizar la división en bloques, la coincidencia correcta del siguiente bloque y el bloque anterior, y las diferencias, y crearía un archivo mucho más pequeño que podría abrirse con el mismo decodificador de video y se vería casi exactamente lo mismo.

(esta imagen demuestra cómo el algoritmo de búsqueda de bloques de H.265, también conocido como High Efficiency Video Coding, es más flexible que el de H.264, lo que lo hace significativamente más efectivo para lograr una alta calidad de imagen con un ancho de banda bajo).

Esos son los elementos básicos: por supuesto, hay muchas variaciones, muchos detalles que he omitido y muchos otros tipos de información que aprendimos a digitalizar de manera efectiva. Estoy dejando espacio para preguntas futuras (o pasadas).

La conversión de varios formatos de archivo en datos binarios estructurados depende completamente del tipo de archivo que está “codificando”. El formato de archivo de mapa de bits (BMP), por ejemplo, es un formato de archivo muy simple de leer y procesar porque cada texel puede considerarse conceptualmente como representado por 3 bytes cada uno (1 byte cada uno para los valores RGB de ese píxel). Existen pequeñas variaciones en cómo algunos de los formatos de mapa de bits almacenan datos, pero básicamente es solo

  • Una porción de bytes para los datos del encabezado, incluidas las dimensiones del BMP y el desplazamiento de los datos ráster.
  • RGBRGBRGBRGB …

Un formato de imagen simple como este ya está en “formato binario”, ya que no es legible para los humanos, sin embargo, debido a la simplicidad del formato de archivo, es altamente descomprimido (en comparación con JPEG, por ejemplo), ya que contiene los datos de imagen sin procesar. . La forma en que el programador decide usar estos datos depende de la aplicación (los mapas de bits son buenos para almacenar mapas de altura en aplicaciones 3D, por ejemplo), todo es cuestión de comprender cómo se almacenan los datos codificados, decodificarlos y tal vez almacenarlos en alguna otra aplicación de manera significativa.

Otro ejemplo común de manipulación de contenido de archivos, especialmente en lo que respecta a los archivos de texto es la compresión de datos. Un programa simple podría leer los valores ASCII de un archivo de texto donde cada carácter está consumiendo un byte de datos, y aplica un algoritmo de codificación de longitud de ejecución para almacenar letras y cuántas veces se repiten consecutivamente (para ciertos archivos de texto esto podría ahorrar cantidades masivas de memoria). Por ejemplo, un archivo de texto que contiene

AAAABBBB

ocuparía 8 bytes de datos, pero si se procesara a través de un simple programa de compresión de datos de codificación de longitud de ejecución, se almacenaría como

A4B4

que solo ocuparía 4 bytes de datos (obviamente, los beneficios de dicho esquema de compresión dependen en gran medida de la estructura del archivo de texto de entrada).

Estos son solo algunos ejemplos de cómo se pueden leer y procesar imágenes y archivos de texto. Espero que ayude.

Voy a darle una respuesta ligeramente diferente, centrándome primero en cómo se crean y almacenan los datos de la computadora.

Antes de volver a eso, voy a ir a lo que parecerá estar “fuera de rieles”, pero luego te mostraré cómo hemos estado en los rieles todo el tiempo …

¡Así que aquí va!

Este es un interruptor de luz: (¡Malísimo intento de Photoshop entrante!)

En este caso, está en la posición “Abajo”. Por lo tanto, la luz que controla está “Apagada”.

¿Cuántos estados puede tener esa luz?
Respuesta: 2 – Apagado (interruptor hacia abajo) y Encendido (interruptor hacia arriba)

Sin interruptor de luz, solo hay un estado posible: estar siempre encendido o siempre apagado (probablemente siempre apagado)

¿Qué pasa si tenemos dos interruptores, dos lámparas (una en cada interruptor) y las lámparas tienen bombillas de colores, digamos que los colores son rojo y verde.

¿Con cuántos colores podemos iluminar nuestra sala hipotética?

Respuesta: 4.

+
= habitación negra

+
= sala verde

+
= habitación roja

+
= habitación amarilla (luz verde y roja cuando se combinan hacen amarillo)

Al agregar solo un interruptor más, duplicamos el número de resultados posibles.

Si agregamos un interruptor más, lo duplicamos nuevamente, porque podemos tener las luces en los 4 estados anteriores pero con el nuevo interruptor en una posición, luego los 4 estados anteriores nuevamente pero con el interruptor en la posición opuesta y 4 + 4 = 8.

Cada vez que ponemos solo un interruptor más en la serie, los posibles resultados se duplican.

Ahora, imagine que en lugar de “on” y “off” usamos un número para representar el estado de “on” y “off”. Y usamos “1” para “encendido” y “0” para “apagado”.

Por lo tanto, nuestros ejemplos anteriores significan: (Cada número solo representa encendido o apagado, recuerde)
0 + 0 = negro
0 + 1 = verde
1 + 0 = rojo
1 + 1 = amarillo

Ahora, si terminamos con un montón de interruptores, digamos … 8 – y cada uno tiene un color diferente con un brillo diferente asignado, ¿cuántas posibilidades de luz existirían?

Recuerde, cada interruptor adicional duplica el número de combinaciones, por lo tanto:

1) . 2) . 3) . 4) . 5) . 6) . 7) . 8
2) . 4) . 8) . dieciséis . 32) 64) 128 256

¡Podríamos tener 256 posibles resultados diferentes! ¡Con solo 8 interruptores!

Bueno, resulta que las computadoras almacenan los números exactamente de esta manera. Cada “encendido” o “apagado” se representa como un 0 o 1: y aquí están los primeros 8 valores en orden:

0000 0000
0000 0001
0000 0010
0000 0011

0000 0100
0000 0101
0000 0110
0000 0111

(A menudo escribimos estos en pares de 4 interruptores para que sean más fáciles de leer)

… etc …

Hasta

1111 1110
1111 1111

… Ahora, esos son estados “on / off”. No son números, pero tienen un orden para ellos como se representa arriba: cada vez que aumenta, agrega un 1 (o “on”) al borde derecho y si ya es un 1, encuentra el siguiente 0, haga es un 1 y vuelve a poner todos los 1s que pasaste a 0. (o solo mira un poco el patrón y deberías ver cómo progresa)

Este orden ha sido acordado y para dejar de decir cosas tontas como “un valor de cuatro interruptores”, los programadores decidieron que cada interruptor se llamaría un “bit”. (Derivado del inglés antiguo, donde bit significa una sola mordida, que a veces puede ser un poco confuso con una palabra que aparece en breve, pero trata de pensar en “bit” como “0 o 1”)

Los programadores son, por definición, perezosos, por lo que no les gusta siquiera decir “un número de 4 bits” y, por lo tanto, deciden que 4 bits son “nybble” (o “nyble” o “mordisco”) y 8 bits son un “byte” ( ¡probablemente hayas oído hablar de este!) o, a veces, de un “octeto”.

También hay otros más grandes, pero si los presento, las cosas se saldrán de control muy rápido …

Recuerde: ¡estos no son números!

En cambio, son conmutadores que representan algún almacén de datos de alguna manera.

Si decidimos que están almacenando números enteros, entonces podríamos decir:

0000 0000 = 0
0000 0001 = 1
0000 0010 = 2
0000 0011 = 3

Porque recuerda, tienen un orden específico.

Pero también podrían estar almacenando colores directamente, usando alguna convención acordada, como tal vez:

0000 0000 = negro
0000 0001 = rojo
0000 0010 = verde
0000 0011 = amarillo

Quizás estés pensando “Ah, ahí están los colores”, sin embargo, no es así …

Muy comúnmente, los valores que se almacenan … se almacenan como números enteros.

En un monitor de computadora, cada punto de luz se ilumina de acuerdo con (¡redoble de batería, por favor!) 256 niveles de brillo para cada uno de rojo, verde y azul. (¡Porque con luz, rojo completo, verde completo más azul completo hace que el blanco!)

Entonces, dado que cada punto (llamado “píxel”, porque los programadores son perezosos y no les gusta decir “elemento de imagen”) está iluminado con 256 tonos de rojo, más 256 tonos de azul, más 256 tonos de verde, entonces el La forma más básica de almacenar esto sería:

punto 1: rojo: 128, verde: 200, azul 100
punto 2: rojo: 100, verde 20, azul 0
punto 3: rojo: 80, verde 100, azul 255

Ahora, si miras esto, podrías decir “¡Oye, si son solo un montón de puntos seguidos, tal vez pueda omitir la numeración / nombrarlos!”.

Luego, sus datos de imagen se convierten en:

rojo: 128, verde: 200, azul 100
rojo: 100, verde 20, azul 0
rojo: 80, verde 100, azul 255

Ahora, miras de nuevo y dices “¡Oye! Si siempre se pone rojo, verde, azul, rojo, verde, azul, etc., entonces tal vez pueda poner los números y saber cuando los leo que estoy leyendo rojo, verde, azul, rojo, verde, azul, etc. ”

Entonces haces esto:

128, 200, 100, 100, 20, 0, 80, 100, 255

Entonces te das cuenta de “¡Oye, estoy almacenando solo números para poder enviar solo la versión binaria de cada uno de los números a mi archivo!”

Y escribes en el disco duro:

1000 0000 1100 1000 0110 0100 0110 0100 0001 0100 0000 0000 0101 0000 0110 0100 1111 1111

Tada! Ha almacenado un archivo (más o menos) exactamente de la misma manera que se almacena un archivo BMP.

Ahora, cuando lo lees, te das cuenta de que no sabes qué ancho / alto era la imagen original, por lo que también decides “Antes de que comiencen todos los datos de píxeles, voy a almacenar más información en la parte delantera de la imagen”. archivo “y esa información puede contener el ancho y el alto de la imagen.

Podría incluir cualquier cosa. Al igual que la longitud, la latitud de la ubicación original de la cámara cuando se tomó la foto. O la fecha y hora en que se tomó. O un millón de otras piezas de información, lo que sucede en algunos formatos de archivo hoy.

Dado que un grupo de programadores se sentaron y acordaron cómo ocurriría eso, crearon lo que se llama Exif Standard o “Formato de imagen intercambiable”

Pero en el fondo, es solo almacenar un montón de “valores” que significan “iluminar los puntos de acuerdo con este brillo …”

Entonces, ¿qué pasa con los archivos de texto?

Bueno, se almacenan de la misma manera más o menos. Cada carácter que escribe en un teclado tiene una secuencia binaria asociada.

“A” (en mayúscula, ¡porque apestaría si sus ensayos guardados se convirtieran en minúsculas!) Es binario 0100 0001 y “B” es 0100 0010, etc. siempre que lo guarde en un formato estándar llamado “ASCII” . “A” minúscula es 0110 0001 y “b” minúscula es 110 0010 … etc.

Este es a menudo el caso de por qué los programadores principiantes buscan cuadros ASCII y ven que “A” es decimal 65 y “a” es decimal 97 y dicen “eso no tiene ningún sentido, ¿por qué harían eso?”

Sin embargo, permítanme colocar sus formas binarias una encima de otra:

0100 0001 = A
0110 0001 = a

0101 1010 = Z
0111 1010 = z

Ahora déjame cambiar dónde está escrito el separador de emparejamiento:

010 00001 = A
011 00001 = a

010 11010 = Z
011 11010 = z

Los primeros 3 bits significan “010 = letra mayúscula” y “011 = letra minúscula” y los últimos 5 son la letra en cuestión. Después de todo, ¿cuál es el valor decimal del binario 0001 1010? ¿Por qué son 26! ¡Lo mismo que el número de letras en el alfabeto!

(Puede usar la calculadora en modo “Programador” para convertir binario a decimal sin tener que aprender el proceso manualmente si alguna vez desea verificar dos veces)

Por lo tanto, para almacenar un archivo de texto con solo la palabra “Cat”, la forma más básica sería almacenar esto como un archivo de datos:

0100 0011 0110 0001 0111 0100

Finalmente, debido a cómo funcionan los discos duros, los programadores suelen almacenar un archivo binario “He terminado” en el archivo que no representa un carácter de teclado. ASCII en realidad no tiene “Fin de archivo” en su gráfico, por lo que la mayoría de los programadores se decidieron por:

0001 1010

Y se decidieron por esto porque ASCII 0001 1010 significa “Sustituto”, que la mayoría de los programadores dijo “eh. Inútil”, especialmente en un archivo de texto porque no tiene sentido allí. (Se usa cuando se comunica entre sistemas para decir “No puedo mostrar esos datos”)

Por lo tanto, para almacenar nuestro archivo de texto con los datos “Cat” podríamos escribir un archivo de 4 bytes con el siguiente contenido:

0100 0011 0110 0001 0111 0100 0001 1010

Entonces, aquí está la prueba: creé un archivo llamado Cat.txt y lo guardé en mi disco duro. ¿Cómo se ve en su formato binario sin formato?


Prueba. Éxito.

(Almacenado en el formato de 3 bytes sin un carácter de terminación)

IMAGEN

¿Cómo se convierte una imagen en matriz?

Consideremos que [math] ABCD [/ math] es una imagen. La altura de la imagen es ‘[matemática] h [/ matemática]’ y el ancho de la imagen es ‘[matemática] w [/ matemática]’. De la imagen podemos decir que en la dirección [math] x [/ math] la imagen se asigna de [math] x = 20 [/ math] a [math] x = 220 [/ math]. De manera similar, en la dirección [math] y [/ math], la imagen se asigna de [math] y = 25 [/ math] a [math] y = 195 [/ math].

[matemáticas] Z [/ matemáticas] es el punto ubicado en la imagen. Donde cada punto ubicado en la imagen tiene una intensidad específica. Consideremos que la intensidad varía de [matemática] 0 [/ matemática] a [matemática] 10 [/ matemática] como se muestra en la esquina derecha de la imagen. Es en escala de grises [1].

Imagen como función: [matemáticas] f (x, y) ε R [/ matemáticas]

que es similar a [matemáticas] f: R * R -> R [/ matemáticas]

[math] R ^ 2 [/ math] se asigna a [math] R [/ math] para cada valor de [math] x (20,220) [/ math] y [math] y (25, 195) [/ math] dentro del rango especificado de [matemática] x [/ matemática] y [matemática] y [/ matemática] tendrá intensidad, que está en el rango [matemática] (0, 10). [/ matemática]

La imagen de una función es: [matemáticas] f: [20,220] * [25,195] -> [0,10] [/ matemáticas]

[matemática] Z (x, y) -> z [/ matemática] donde [matemática] z ε (0,10) [/ matemática] de esta manera se definirán todos y cada uno de los puntos de la imagen y así se formará la matriz.

¿Qué pasa con las imágenes en color?

Una imagen en color es solo 3 funciones apiladas juntas. Aquí cada función representa intensidades de color rojo, azul y verde.

Mapeo de imagen en color en forma de función:

[matemática] f: R * R = R * R * R [/ matemática] donde [matemática] R * R [/ matemática] en LHS representa [matemática] x [/ matemática] y [matemática] y [/ matemática] mientras [matemática] R * R * R [/ matemática] en RHS representan intensidades de r, b, g [matemática]. [/ matemática]

¿Cómo se convierte la imagen en forma binaria?

Esta es la interfaz de usuario de MATLAB. Entonces, el tipo de datos de la imagen es [math] uint8 [/ math]. que es entero sin signo [matemática] 8 [/ matemática], [matemática] 8 [/ matemática] significa [matemática] 8 bits [/ matemática]. Indica el número de bits asignados para almacenar cada valor de intensidad. De esta forma, todos y cada uno de los valores de la matriz se almacenan en forma de 8 bits (valor binario).

¿Cómo se comprime la imagen para eliminar datos redundantes?

Tomaremos un ejemplo del estándar JPEG (Joint Photographic Expert Group) para compresión con pérdida:

  1. Tenemos una imagen en forma de matriz [math] n * n [/ math] (píxeles) y esta entrada se aplica a DCT [2] [3]. Todos y cada uno de los elementos sufrirán una transformación discreta del coseno.
  2. Después de obtener DCT, esta matriz se cuantifica. El proceso de cuantización [4] reduce el número de bits necesarios para la codificación. En este proceso se pierde cierta cantidad de información. Es por eso que JPEG es una compresión con pérdida. La tabla así obtenida ahora se lee en zigzag [5] [6] para producir una imagen digital comprimida. Obtenemos una imagen digitalizada comprimida en la salida.

TEXTO:

  1. Uno de los métodos más importantes que se utilizan hoy en día para convertir archivos de texto en formato binario comprimido es la técnica de codificación Limpel Zev Welch [7]. El algoritmo LZW [8] [9] es un algoritmo de compresión de datos sin pérdidas. Si lees parte de codificación de la página de Wikipedia de codificación LZW. El uso del mensaje de entrada LZW se reduce casi un 22% en ese ejemplo en particular. La aplicación de la técnica de codificación Lempel Ziv Welch se encuentra en sistemas Unix y en GIF, junto con que es eficiente en la compresión de archivos de texto a aproximadamente la mitad de su tamaño original.
  2. Del mismo modo, como se menciona en otras respuestas, el texto también se puede convertir en datos binarios utilizando ASCII [10]. Cada carácter tiene un valor ASCII específico y luego podemos convertir el valor ASCII en decimal en forma binaria.
  3. En los dispositivos lógicos programables, como el código del microcontrolador, se escribe en un formulario compatible con el sistema hexadecimal de números. En este caso se utilizan valores hexadecimales [11] de caracteres definidos por ASCII. Estos valores se convierten luego en forma binaria. De esta manera, la cadena de texto se convierte en forma binaria,

Notas al pie

[1] bphotoart-grayscale-coloring-page.jpg

[2] Transformación discreta de coseno

[3] Transformación discreta de coseno

[4] Cuantización (procesamiento de señales) – Wikipedia

[5] https://www.google.co.in/search ? …

[6] Sociedad Americana de Matemáticas

[7] Lempel – Ziv – Welch – Wikipedia

[8] Algoritmo Lempel-Ziv-Welch (LZW)

[9] http://web.mit.edu/6.02/www/s201

[10] Códigos de caracteres ASCII y conversión de tabla html, octal, hexadecimal y decimal

[11] Hexadecimal – Wikipedia

Hay algunas respuestas realmente elaboradas aquí, pero me gustaría alejarme un poco y explicar el panorama general, ya que creo que eso hace que sea más fácil de entender.

Primero, en su pregunta que dice “convertir”, esto sugiere una idea errónea: no hay conversión en ningún lugar, todos los datos en la computadora son binarios de principio a fin.

La computadora está conectada a todo tipo de hardware: una tarjeta de video para mostrar cosas, un procesador de audio para hacer sonido, posiblemente impresoras, etc. Cada uno de estos dispositivos se fabrica con un montón de pequeños cables que se conectan a la placa principal de la computadora, lo que le permite a la computadora decirle qué hacer. Un programa de computadora puede “encender” o “apagar” cada uno de estos cables. Ahora, ¿cuál sería una manera fácil para que un programador haga esto de la manera correcta?

Veamos el ejemplo de una imagen que se mostrará. Un programador necesitará almacenarlo en la memoria de la computadora de alguna manera para asegurarse de que pueda informar al hardware de video sobre qué píxel debe obtener de qué color. Cada valor en la memoria de la computadora tiene una ubicación (llamada “dirección”) y un valor (32 o 64 bits de información); Podríamos almacenar los colores de los píxeles en las direcciones que queramos.

Pero las imágenes tienen la propiedad conveniente de que son una matriz rectangular de píxeles. Entonces, si los ordenamos de izquierda a derecha, de arriba a abajo, esto crea una larga lista de píxeles que realmente podemos almacenar en un solo bloque consecutivo de memoria, es decir, podríamos poner los valores en direcciones consecutivas. ¡Eso hace que sea fácil hacer un seguimiento del color del píxel almacenado y dónde! Así, por ejemplo:

el píxel superior izquierdo está en la dirección 3457352 (debe comenzar en alguna parte )
1 derecha de arriba a la izquierda está en la dirección 3457353

El último píxel de la primera fila está en la dirección 3458531
el primer píxel de la segunda fila está en la dirección 3458532

y así.

Si necesitamos decirle a la tarjeta de video el color de las posiciones x del píxel desde la izquierda y las posiciones y desde la parte superior, sabemos que debemos buscar en la memoria la dirección 3457352 + x + 1280 * y. Eso es muy conveniente!

Además, si necesitamos guardar la imagen en el disco duro o en una tarjeta de memoria, simplemente podemos volcar el bloque de memoria consecutivo allí. En realidad, eso es más o menos lo que es una imagen BMP; excepto que dichos archivos generalmente están adornados con información adicional, como cuántas filas y columnas tiene la imagen, y cosas así.

Entonces, la idea es que, al final, los programadores necesitan almacenar cualquier información de cualquier tipo en la memoria de alguna manera. La memoria es una larga lista de valores, cada uno de los cuales tiene una dirección. ¡La manera precisa de lograr esto depende de lo que el programador considere conveniente!

En el nivel más abstracto y general:
1) Primero encuentra una manera de dividirlo en unidades, convirtiendo datos continuos (como una grabación de audio o una imagen) en datos discretos (CD, píxeles) si es necesario.
2) Luego encuentras una manera de convertir esas unidades en números y básicamente has terminado.

Para dar algunos ejemplos:
Un texto se divide en sus caracteres y a cada carácter se le asigna un número (como el código ASCII o Unicode).
Una imagen se divide en píxeles (elementos de imagen) y el color de cada píxel se divide en componentes rojo, verde y azul, cada uno de ellos convertido en un número, por lo que un píxel se convierte en 3 números como (100,10,0) aquí significa 100 acciones de azul, 10 de rojo y nada de verde. Entonces, una imagen se convierte en una secuencia de números.
Los datos de audio (una onda continua para ser exactos) se desglosan en puntos muy cercanos (una onda discreta o “digital”) luego la amplitud de estos puntos se mide y se convierte en números (llamado muestreo).

Puede parecer muy lejano al principio, pero este proceso puede dividir virtualmente cualquier forma de datos en números y luego calculará el resto 😉

Uno solo necesita definir un nuevo tipo de sistema de codificación si no está satisfecho con los existentes.

Imagine una imagen simple en formato JPEG. Todos los valores de imagen están representados en formato RGB llamados píxeles. Todos los datos de la imagen están representados por una gradación de color para RGB, y en consecuencia tendrán diferentes valores, que están representados en formato binario.

Imagina que quieres crear tu propio esquema de codificación, esto se puede hacer.
Normalmente, los esquemas de codificación personalizados pueden ser muy eficientes en términos de espacio, según su gusto. Por ejemplo, tiene una imagen para representar. En primer lugar, debe definir los atributos. Por ejemplo, ¿cuáles son los diferentes tipos de datos que puede representar? Imagine que trata con imágenes en el tablero de ajedrez. Aquí vemos que la representación del color es blanco o negro. Esto significa que no necesita los 8 bits completos para la representación de la escala de grises. Puede diseñar este esquema de codificación que establece que cada vez que encuentre 1 lugar, un píxel negro, o bien, coloque un blanco. Para decodificar esto, sin embargo, necesita una aplicación. Puede desarrollar una aplicación web o java para decodificar eso y generar la imagen.

Ahora, si desea hacerlo público, necesita una representación para su imagen. Por eso su diseño es una extensión única para ello. Su aplicación debe identificar y convertir solo esos archivos de extensión.

Nota: Normalmente, cuando convierte imágenes a formato binario, verá que los bits iniciales están reservados como información de encabezado.

Los archivos de texto ya son una codificación binaria. Las imágenes tienen una variedad de técnicas de codificación. Las técnicas sin comprimir representan cada píxel en la imagen como un número binario corto único para imágenes monocromas, o como un triple de números binarios que codifican los componentes rojo, verde y azul de la imagen. Además, existen muchas técnicas para representar imágenes digitalmente en una forma más comprimida. Por lo general, esto implica reasignar la imagen desde el dominio espacial al de frecuencia y eliminar las bandas de onda con baja energía de la representación.

Las computadoras en realidad no traducen nada a binario, todo es binario desde el principio, y la computadora nunca sabe nada más que binario.

El carácter “A” almacenado en la memoria sería 01000001, y la computadora no lo ve como algo más que un número binario. Cuando le pedimos a la computadora que muestre ese número como un carácter en la pantalla, buscará la representación gráfica en una definición de fuente para encontrar otros números binarios para enviar al hardware de la pantalla.

Del mismo modo, hagamos lo que hagamos con el archivo de texto y las imágenes en la computadora, son todas las formas de mover valores binarios, hacer cálculos sobre valores binarios y traducirlos a otros valores binarios.

Para obtener información más interesante y detallada, debe leer esto una vez,

¿Cómo convierte la computadora diferentes tipos de datos como imágenes o texto en binario? El | Blog di istanbul

Las imágenes en blanco y negro son las más fáciles de describir: solo tiene una convención que dice que un bit “0” significa un punto negro y un “1” significa un punto blanco. Luego, usted decide cuántos bits debe tener la imagen de arriba a abajo. Estas son solo convenciones arbitrarias. A continuación, establece y borra mediante programación para “dibujar” una imagen. Por ejemplo, para dibujar una línea blanca horizontal, escribe un bucle que establece bits consecutivos en la memoria. Para una línea vertical, nuevamente un bucle, excepto que saltas a la siguiente línea hacia abajo saltando por la longitud de la fila.

Para las imágenes en color, conserva tres bits o bytes, uno para el rojo, el verde y el azul.

Todos los datos y el software deben estar en la memoria y / o registros antes de que la CPU pueda utilizarlos. Los datos se almacenan en la memoria utilizando una representación binaria. Esto es para que pueda combinarse en dos estados diferentes en componentes eléctricos. Esto generalmente se traduce ya que tiene voltaje o no; representando el binario 1 o 0. Los operandos lógicos se pueden usar y ser los bloques de construcción para las operaciones y las declaraciones de lenguaje superior para que no tengamos que tratar directamente con el binario. En el lado de los datos, los desarrolladores antes de usar un nuevo tipo de datos tuvieron que encontrar una manera de representarlo en binario o en cualquier otro formato que se ajuste a una representación binaria. Más cerca de binario tenemos tipos hexadecimales y numéricos. Después de estos formatos básicos, tenemos tipos más complejos que van a la infraestructura de datos como sistemas de archivos, bases de datos y cualquier otra cosa como la web.

Cuando coloca datos en la computadora, necesita una forma de describirlos. La forma de describir los datos es el proceso de conversión. Por ejemplo, si necesita describir un punto rojo, una forma de describirlo es:

1. tamaño 1px por 1px;
2. color: rojo

Luego puede escribir un programa para “codificar” esa descripción. Un programa de conversión diferente es solo una forma diferente de “codificar” esa descripción

Deje de escribir, convierta fácilmente la imagen escrita a mano en texto editable.