¿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 expression
evaluar la expresión dada comoperl
código-p
:sed
modo. 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 code
funciona comosed code
excepto que esperl
código en lugar desed
có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.pack
hace lo contrario deunpack
. Verperldoc -f pack
para 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
xxd
para 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 quebc
siempre es muy exigente con el orden correcto de las bases:obase
primero debe especificar la base resultante ( ) y luego agregar su elecciónibase
.fuente
xxd
sería bueno, excepto que muestra esa primera columna molesta y la entrada base al final de la línea.awk
deshacerse 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.-p
opción para obtener una salida 'pura'xxd -b
enfoque yo mismo, sin embargo, uno no puede usarxxd
solo 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 -r
Usando bc y bash:
fuente
Solución de shell para convertir binario a ascii:
fuente
sed
,tr
ybc
son 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