Je le fais maintenant de cette façon:
[root@~]# echo Aa|hexdump -v
0000000 6141 000a
0000003
[root@~]# echo -e "\x41\x41\x41\x41"
AAAA
Mais ça ne se comporte pas exactement comme je le voulais,
la forme hexadécimale de Aa
devrait être 4161
, mais la sortie est 6141 000a
, ce qui semble ne pas avoir de sens.
et lors de l'exécution de hex en ascii, existe-t-il un autre utilitaire pour que je n'ai pas besoin du préfixe \x
?
La raison en est que hexdump
imprime par défaut les entiers 16 bits, pas les octets. Si votre système en possède, hd
(ou hexdump -C
) ou xxd
fournira des sorties moins surprenantes. Sinon, od -t x1
est un moyen standard POSIX d'obtenir une sortie hexadécimale. Vous pouvez utiliser od -t x1c
pour afficher les valeurs hexadécimales d'octets et les lettres correspondantes.
Si vous avez xxd
(fourni avec vim), vous pouvez utiliser xxd -r
pour reconvertir à partir d'hex (à partir du même format que xxd
produit). Si vous avez simplement un hexagone simple (juste le '4161', qui est produit par xxd -p
), vous pouvez utiliser xxd -r -p
pour reconvertir.
Pour la première partie, essayez
echo Aa | od -t x1
Il imprime octet par octet
$ echo Aa | od -t x1
0000000 41 61 0a
0000003
0a
est le retour à la ligne implicite produit par écho.
Utilisez echo -n
ou printf
à la place.
$ printf Aa | od -t x1
0000000 41 61
0000002
$> printf "%x%x\n" "'A" "'a"
4161
Pour une solution à une ligne:
echo "Hello World" | xxd -ps -c 200 | tr -d '\n'
Il imprimera:
48656c6c6f20576f726c640a
ou pour les fichiers:
cat /path/to/file | xxd -ps -c 200 | tr -d '\n'
Pour l'opération inverse:
echo '48656c6c6f20576f726c640a' | xxd -ps -r
Il imprimera:
Hello World
Avec bash:
a=abcdefghij
for ((i=0;i<${#a};i++));do printf %02X \'${a:$i:1};done
6162636465666768696A
Je ne sais pas à quoi ça ressemble, mais ça fait très bien le travail
ascii2hex(){ a="$@";s=0000000;printf "$a" | hexdump | grep "^$s"| sed s/' '//g| sed s/^$s//;}
Créé ceci quand j'essayais de voir mon nom en HEX;) Utiliser comment pouvez-vous l'utiliser :)
echo -n Aa | hexdump -e '/1 "%02x"'; echo
La réponse de SteinAir ci-dessus m'a été utile - merci! Et ci-dessous est une façon inspirée de convertir des chaînes hexagonales en ascii:
for h in $(echo "4161" | sed "s/\(..\)/\1 /g"); do printf `echo "\x$h"`;done
Aa
Text2Conv="Aa"
for letter in $(echo "$Text2Conv" | sed "s/\(.\)/'\1 /g");do printf '%x' "$letter";done
4161
L'astuce consiste à utiliser sed pour analyser Text2Conv afin de formater, nous pouvons ensuite séparer une boucle en utilisant f.
voici un petit script que j'ai écrit pour convertir ascii en sortilège. J'espère que ça aide:
echo '0x'"`echo 'ASCII INPUT GOES HERE' | hexdump -vC | awk 'BEGIN {IFS="\t"} {$1=""; print }' | awk '{sub(/\|.*/,"")}1' | tr -d '\n' | tr -d ' '`" | rev | cut -c 3- | rev
selon http://mylinuxbook.com/hexdump/ vous pouvez utiliser le paramètre de format hexdump
echo Aa | hexdump -C -e '/1 "%02X"'
retournera 4161
pour ajouter un saut de ligne supplémentaire à la fin, ajoutez un autre formateur.
MAIS: le format donné ci-dessus donnera des résultats multiplicateurs pour les caractères répétitifs
$ printf "Hello" | hexdump -e '/1 "%02X"'
48656C*
6F
au lieu de
48656c6c6f