¿Cuál es una buena herramienta para convertir ASCII a binario y binario a ASCII?
Esperaba algo como:
$ echo --binary "This is a binary message"
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
O, más realista:
$ echo "This is a binary message" | ascii2bin
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
Y también al revés:
$ echo "01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101" | bin2ascii
This is a binary message
PD: estoy usando bash
PS2: espero no haber obtenido el binario incorrecto

echo.Respuestas:
-e expressionevaluar la expresión dada comoperlcódigo-p:sedmodo. La expresión se evalúa para cada línea de entrada, con el contenido de la línea almacenado en la$_variable e impreso después de la evaluación de la expresión .-l: incluso más comosed: en lugar de la línea completa, solo se encuentra el contenido de la línea (es decir, sin el delimitador de línea)$_(y se agrega una nueva línea en la salida). Entoncesperl -lpe codefunciona comosed codeexcepto que esperlcódigo en lugar desedcódigo.unpack "B*"trabaja en el$_variable de manera predeterminada y extrae su contenido como una cadena de bits que va del bit más alto del primer byte al bit más bajo del último byte.packhace lo contrario deunpack. Verperldoc -f packpara más detalles.Con espacios:
(se supone que la entrada está en bloques de 8 bits (con relleno 0)).
Con
unpack "(B8)*", extraemos 8 bits a la vez, y unimos las cadenas resultantes con espacios conjoin " ".fuente
Puede usar
xxdpara convertir desde ASCII y binario.Convertir bases
Si está buscando hacer conversiones básicas entre Hex, Octal y Dec, generalmente uso la herramienta de línea de comandos de la calculadora básica (
bc) para hacer esas cosas. Tenga en cuenta quebcsiempre es muy exigente con el orden correcto de las bases:obaseprimero debe especificar la base resultante ( ) y luego agregar su elecciónibase.fuente
xxdsería bueno, excepto que muestra esa primera columna molesta y la entrada base al final de la línea.awkdeshacerse de él, pero no parece tener interruptores para deshabilitar esta pantalla.| awk '{print $2}'. También hay otras herramientas.od&hexdump. Estoy buscando otro método usando esos.-popción para obtener una salida 'pura'xxd -benfoque yo mismo, sin embargo, uno no puede usarxxdsolo para convertir binario de nuevo a ASCII. Entonces, me temo que tendrías que usar algo comoprintf 'obase=16;ibase=2;%s\n' "$n" | bc | xxd -p -r, con $ n que contiene el número para convertir, ya sea como una larga cadena de dígitos, o una cadena de dígitos separados por punto y coma. Si puede garantizar que $ n encaja en el tipo aritmético de sus proyectiles, entonces puede salirse con la suyaprintf '%x\n' $((2#$n)) | xxd -p -rUsando bc y bash:
fuente
Solución de shell para convertir binario a ascii:
fuente
sed,trybcson programas externos llamados en el script de shell.En python
fuente
Usando Python 3:
Guardado como "bin2ascii", por ejemplo:
fuente
Codificación binaria por base64
Decodificación base64
fuente