Converter o código ascii para hexadecimal no shell script do UNIX

6

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: - = & gt ; %2d .

Alguma idéia?

    
por Olivier DUVAL 27.08.2010 / 17:37

3 respostas

11

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 hexagonal de um caractere, mas é necessário passar uma string que inclua o caractere entre aspas simples ( Editar : citação 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
    
por 27.08.2010 / 18:08
3

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 da entrada é inteiros hexadecimais de 1 byte.

    
por 27.08.2010 / 19:02
1

xxd é um utilitário de despejo hexadecimal fornecido como parte do pacote vim-common
Ele tem uma conveniente opção -p que produz um estilo hexdump contínuo 'plain / postscript'. Isso pode ser facilmente invertido via -r ... -u irá gerar dígitos hexadecimais maiúsculos.

$ 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
    
por 26.04.2011 / 12:41

Tags