¿Hay un comando simple para revertir un número hexadecimal?
Por ejemplo, dado el número hexadecimal:
030201
La salida debe ser:
010203
Usando el rev
comando, obtengo lo siguiente:
102030
Actualizar
$ 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
fuente
fuente
010203
como un hexadecimal, aunque no la uso0x
Respuestas:
Puede convertirlo a binario , revertir los bytes , opcionalmente eliminar las nuevas líneas finales
rev
<2.24 y volver a convertirlo:Utilizando
Esto no funciona si la cadena contiene el byte NUL, porque
rev
truncará la salida en ese punto.fuente
0102030a
lugar de010203
0102030a
rev
versión2.20.1
; use este formatoxxd -revert -plain <<< '030201' | LC_ALL=C rev | tr -d '\n'| xxd -plain
rev
antes de la versión2.24
tiene un nuevo error de línea. más información github.com/karelzak/util-linux/commit/…Si su sistema tiene un
rev
comando.Si tiene un comando
tac
otail -r
:Con
zsh
:(como en el
dd
enfoque: intercambiar pares de caracteres, dividirlos en una lista de caracteres individuales (s::
), invertir el orden (Oa
) y unir (j::
)).POSIXY:
O
Con
perl
:fuente
perl -F'(..)' -lane 'print reverse(@F)'
:)-F
así. (Puedo verlo descrito en elsplit()
manual ahora).-F
básicamente se está dividiendo$_
... además de usar expresiones regulares como si-F'/"\K\|(?=")/'
se pudiera especificar el número de divisiones también ... como-F'/:/,$_,2'
... usar()
si el separador también debe ser capturadotr -d '\n'
Con
fold
+tac
+tr
:fold
- dividir cada 2 bytestac
- gato inversotr
- eliminar nuevas líneasfuente
Esto revierte cada línea hexadecimal:
/(..)/g
construye una lista con las coincidencias capturadasfuente
(en aras de la exhaustividad)
fuente
Basado en la respuesta de Ipor Sircer https://unix.stackexchange.com/a/321867/337458 Recomendaría esto en su
~/.bashrc
para tener un buen comando que simplemente puede llamar:fuente