¿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 revcomando, 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

010203como un hexadecimal, aunque no la uso0xRespuestas:
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
revtruncará la salida en ese punto.fuente
0102030alugar de0102030102030arevversión2.20.1; use este formatoxxd -revert -plain <<< '030201' | LC_ALL=C rev | tr -d '\n'| xxd -plainrevantes de la versión2.24tiene un nuevo error de línea. más información github.com/karelzak/util-linux/commit/…Si su sistema tiene un
revcomando.Si tiene un comando
tacotail -r:Con
zsh:(como en el
ddenfoque: 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)':)-Fasí. (Puedo verlo descrito en elsplit()manual ahora).-Fbá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:
/(..)/gconstruye 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
~/.bashrcpara tener un buen comando que simplemente puede llamar:fuente