Como converter texto ou caractere em hexadecimal em shell korn

1

O shell korn unix fornece uma função para converter texto ou caractere em hexadecimal, por exemplo. hex 31 32 37 33 34 35 35 36 36 37 valor dos caracteres 1273455667 Aqui escrevi o código para exibir, mas não sei como armazenar o resultado em uma variável

str=1273455667

for (( i=0; i < ${#str}; i++ ))
do
c=${str:$i:1}
if [[ $c == ' ' ]]
then
printf "[%s] %X\n" " " \'\ \'
else
printf "[%s] %X\n" "$c" \'$c\'
fi
done
    
por user188979 11.06.2014 / 05:53

3 respostas

2

Se você tem hexdump (o que é bem provável), você pode fazer algo assim:

$ echo "Hello, world!" | hexdump -v -e '/1 "[%_c]: "' -e '/1 "%02X\n"'
[H]: 48
[e]: 65
[l]: 6C
[l]: 6C
[o]: 6F
[,]: 2C
[ ]: 20
[w]: 77
[o]: 6F
[r]: 72
[l]: 6C
[d]: 64
[!]: 21
[\n]: 0A

Para um despejo hexadecimal separado por espaço simples em uma variável:

$ v=$(printf %s 1273455667 | hexdump -v -e '/1 "%02X "')
$ echo "$v"
31 32 37 33 34 35 35 36 36 37
    
por 11.06.2014 / 06:55
2
str=1273455667
unset hex_values
for (( i=0; i < ${#str}; i++ )); do
  c=${str:i:1}
  hex_values+=($(printf "%X" "'$c"))
done

echo "${hex_values[*]}"

Observe que em ksh93 , printf '%X\n' "'$character" fornece o ponto de código do caractere, não os valores hexadecimais dos bytes que formam esse caractere na codificação atual. A esse respeito, é diferente de od -An -vtx1 .

Por exemplo, em localidades UTF-8, por € (codificado como e2 82 ac em UTF-8), ele daria 20ac (o ponto de código unicode para o símbolo do Euro), não e282 ac.

Você pode obter o mesmo comportamento de od se forçar a localidade para C (com export LC_ALL=C ).

Aqui, estamos usando a substituição de comando ( $(...) ) para recuperar a saída do comando. Em ksh93 , quando o comando é embutido, isso não envolve a criação de um pipe e a criação de um subshell, portanto, é relativamente eficiente.

    
por 11.06.2014 / 13:55
0

Você pode usar a biblioteca de Velud do awk:

velour -n '
do print mt_basecon(str_ord(ARGV[1]), 10, 16)
while (ARGV[1] = str_slice(ARGV[1], 2))
' 1273455667

Resultado:

31
32
37
33
34
35
35
36
36
37
    
por 10.04.2017 / 14:04

Tags