2012-10-11 29 views
11

me preguntaba si alguien podría ayudarme a convertir ascii en hexadecimal en bash. código Ejemplo:bash ascii al hex

#!/bin/bash 
STR = "hello" 
#Convert to hex 
HEXVAL = $STR #(in hex here?) 

quiero hexval que tienen el valor: 68656C6C6F (hola en hexadecimal)

+1

Bienvenido a stackoverflow. [¿Ya has probado algo?] (Http://whathaveyoutried.com) Las personas están más ansiosas por ayudar si muestras algún esfuerzo de investigación antes de preguntar. De lo contrario, aparecerás como [vampiro de ayuda] (http://slash7.com/2006/12/22/vampires/) – JMax

+0

posible víctima de http://stackoverflow.com/questions/5724761/ascii-hex-convert -in-bash – mrchampe

Respuesta

17
$ STR="hello" 
$ HEXVAL=$(xxd -pu <<< "$STR") 
$ echo "$HEXVAL" 
6C6C6568A6F 

O:

$ HEXVAL=$(hexdump -e '"%X"' <<< "$STR") 
$ echo "$HEXVAL" 
6C6C6568A6F 

cuidadosa con el '"%X"'; tiene tanto comillas simples como dobles.

+0

Fuiste demasiado rápido, la página de manual cerró ;-) – Benj

0

aquí es una camisa (un poco más complejo, pero funciona bien):

#!/bin/bash 

echo '0x'"`echo $1 | hexdump -vC | awk 'BEGIN {IFS="\t"} {$1=""; print }' | awk '{sub(/\|.*/,"")}1' | tr -d '\n' | tr -d ' '`" | rev | cut -c 3- | rev 
0

convertor BASH puro de la cadena de secuencia hexadecimal imprimible y

str2hex_echo() { 
    # USAGE: hex_repr=$(str2hex_echo "ABC") 
    #  returns "0x410x420x43" 
    local str=${1:-""} 
    local fmt="0x%x" 
    local chr 
    local -i i 
    for i in `seq 0 $((${#str}-1))`; do 
     chr=${str:i:1} 
     printf "${fmt}" "'${chr}" 
    done 
} 

hex2str_echo() { 
    # USAGE: ASCII_repr=$(hex2str_echo "0x410x420x43") 
    #  returns "ABC" 
    echo -en "'${1:-""//0x/\\x}'" 
} 

EXPLICACIÓN

ASCII> hexadecimal: El ingrediente secreto de la conversión eficiente de un personaje a su código ASCII es característica subyacente en printf que, con especificadores de formato que no son cadenas, tiene carácter inicial de ser un simple o doble comillas como una orden para producir el código ASCII subyacente del siguiente símbolo. Este comportamiento está documentado en GNU BASH reference, pero también está expuesto en detalles junto con muchas otras utilidades maravillosas en la página wiki de Greg (también conocida como GreyCat) dedicada a las conversiones de char-ASCII.