70 votes

Convertir des données binaires en hexadécimal dans un script shell

Je veux convertir des données binaires en hexadécimal, juste ça, pas de formatage sophistiqué et tout. hexdump semble trop intelligent, et il "surformate" pour moi. Je veux prendre x octets du /dev/random et les transmettre en hexadécimal.

De préférence, j'aimerais n'utiliser que des outils Linux standard, afin de ne pas avoir besoin de l'installer sur chaque machine (il y en a beaucoup).

93voto

unutbu Points 222216

Peut-être utiliser xxd :

 % xxd -l 16 -p /dev/random
193f6c54814f0576bc27d51ab39081dc

46voto

Zibri Points 2623

Fais attention!

hexdump et xxd donnent les résultats dans un endianness différent !

 $ echo -n $'\x12\x34' | xxd -p
1234
$ echo -n $'\x12\x34' | hexdump -e '"%x"'
3412

Simplement expliqué. Big-endian vs little-endian :D

12voto

Blagovest Buyukliev Points 22767

Vous pourriez peut-être écrire votre propre petit outil en C et le compiler à la volée :

 int main (void) {
  unsigned char data[1024];
  size_t numread, i;

  while ((numread = read(0, data, 1024)) > 0) {
    for (i = 0; i < numread; i++) {
      printf("%02x ", data[i]);
    }
  }

  return 0;
}

Et puis l'alimenter à partir de l'entrée standard :

 cat /bin/ls | ./a.out

Vous pouvez même intégrer ce petit programme C dans un script shell en utilisant la syntaxe heredoc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X