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?
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
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.
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