web-development-kb-pt.site

Converta o código ascii em hexadecimal no script UNIX Shell

Eu gostaria de converter o código ASCII (como - ou _ ou ., etc.) para representação hexadecimal no Shell Unix (sem o comando bc), por exemplo: - => %2d.

Alguma ideia?

7
Olivier DUVAL

Existe uma ferramenta printf que simula a função C; normalmente é em /usr/bin/printf, mas muitos shells implementam built-ins para ele também. Você pode usar %02x para obter a representação hexadecimal de um caractere, mas você precisa ter certeza de passar uma string que inclui o caractere entre aspas simples (Editar: Acontece apenas uma aspa simples no início é suficiente):

printf "%%%02x\n" "'-"   # Outputs %2d

Você pode fazer uma função Shell por conveniência:

function hex() {
    printf "%%%02x\n" "'$1"
}

hex -   # Outputs %2d
hex _   # Outputs %5f
hex .   # Outputs %2e
13
Michael Mrozek

Experimente od :

$ echo -n "-_." | od -A n -t x1

2d 5f 2e

-A n significa não imprimir deslocamentos e -t x1 significa que o tipo de entrada são inteiros hexadecimais de 1 byte.

4
Cristian Ciupitu

xxd é um utilitário hex-dump enviado como parte do vim-common pacote
Tem um prático -p opção que produz um estilo hexdump contínuo 'simples/postscript'. Isso pode ser facilmente revertido via -r... -u produzirá Hex-dígitos em maiúsculas.

$ echo -n "M" |xxd -p    # 1 ASCII char= 1 UTF-8 byte; Unicode Codepoint: U+0041
4d

$ echo -n "〶" |xxd -p -u # 1 CJK char= 3 UTF-8 bytes; Unicode Codepoint: U+3036  
E380B6

$ echo -n "Dump a string" |xxd -p -u  
44756D70206120737472696E67

$ echo -n "Dump and Revert" |xxd -p |xxd -r  
Dump and Revert
2
Peter.O