Existe-t-il une commande simple pour inverser un nombre hexadécimal?
Par exemple, étant donné le nombre hexadécimal:
030201
La sortie doit être:
010203
En utilisant la rev
commande, j'obtiens ce qui suit:
102030
Mise à jour
$ bash --version | head -n1
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
$ xxd -version
xxd V1.10 27oct98 by Juergen Weigert
$ rev --version
rev from util-linux 2.20.1
command-line
numeric-data
hex
Iñaki Murillo
la source
la source
010203
comme un hexadécimal, même si je n'utilise pas0x
Réponses:
Vous pouvez le convertir en binaire , inverser les octets , supprimer
rev
éventuellement les sauts de ligne <2.24 et le reconvertir:En utilisant
Cela ne fonctionne pas si la chaîne contient l'octet NUL, car
rev
tronquera la sortie à ce point.la source
0102030a
place de010203
0102030a
rev
version2.20.1
; utilisez ce formatexxd -revert -plain <<< '030201' | LC_ALL=C rev | tr -d '\n'| xxd -plain
rev
avant la version2.24
ont un nouveau bug de ligne. plus d'infos github.com/karelzak/util-linux/commit/…Si votre système a une
rev
commande.S'il a une commande
tac
outail -r
:Avec
zsh
:(comme dans l'
dd
approche: permuter des paires de caractères, diviser en liste de caractères individuels (s::
), inverser l'ordre (Oa
) et joindre (j::
)).POSIX:
Ou
Avec
perl
:la source
perl -F'(..)' -lane 'print reverse(@F)'
:)-F
comme ça. (Je peux le voir décrit dans lesplit()
manuel maintenant).-F
se divise fondamentalement$_
.. à part l'utilisation d'expressions régulières comme-F'/"\K\|(?=")/'
on peut également spécifier le nombre de divisions ... comme-F'/:/,$_,2'
... utiliser()
si le séparateur doit également être capturétr -d '\n'
Avec
fold
+tac
+tr
:fold
- fractionné tous les 2 octetstac
- chat inversétr
- supprimer les nouvelles lignesla source
Cela annule chaque ligne hexadécimale:
/(..)/g
construit une liste avec les matchs capturésla source
(par souci d'exhaustivité)
la source
Sur la base de la réponse d'Ipor Sircer https://unix.stackexchange.com/a/321867/337458, je recommanderais ceci dans votre
~/.bashrc
pour avoir une belle commande que vous pouvez simplement appeler:la source