Conversión cadena hexadecimal a ascii en línea de comandos bash
Tengo un montón de este tipo de cadena y quiero encontrar un comando para convertirlo en ascii, he intentado con echo -e
y od
, pero no funcionó.
0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2
38
3
Esto funcionó para mí.
-r
le dice que convierta hex a ascii a diferencia de su modo normal de hacer lo contrario-p
le dice que use un formato plano.Este código convertirá el texto
0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2
en un flujo de 11 bytes con valores equivalentes. Estos bytes se escribirán en la salida estándar.Como otros han señalado, esto no resultará en una cadena ASCII imprimible por la sencilla razón de que los bytes especificados no son ASCII. Usted necesita publicar más información acerca de cómo obtuvo esta cadena para que podamos ayudarle con eso.
Cómo funciona: xxd -r traduce datos hexadecimales a binarios (como un hexdump inverso). xxd requiere que cada línea comience con el número de índice del primer carácter de la línea (ejecute hexdump en algo y vea cómo cada línea comienza con un número de índice). En nuestro caso queremos que ese número sea siempre cero, ya que cada ejecución sólo tiene una línea. Por suerte, nuestros datos ya tienen ceros antes de cada carácter como parte de la notación 0x. La x minúscula es ignorada por xxd, así que todo lo que tenemos que hacer es canalizar cada carácter 0xhh a xxd y dejar que haga el trabajo.
El tr traduce los puntos a espacios para que for los divida correctamente.
El
echo -e
debe haber fallado en tu caso debido a un escape incorrecto. El siguiente código funciona bien para mí en una salida similar desu_programa con argumentos
:Ten en cuenta, sin embargo, que tu cadena hexadecimal original contiene caracteres no imprimibles.