Existe um comando simples para reverter um número hexadecimal?
Por exemplo, dado o número hexadecimal:
030201
A saída deve ser:
010203
Usando o rev
comando, recebo o seguinte:
102030
Atualizar
$ 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
fonte
fonte
010203
como um hexadecimal, embora eu não use0x
Respostas:
Você pode convertê-lo em binário , reverter os bytes , opcionalmente, remover novas linhas finais
rev
<2.24 e convertê-lo novamente:Usando
Isso não funciona se a cadeia de caracteres contiver o byte NUL, porque
rev
truncará a saída nesse ponto.fonte
0102030a
vez de010203
0102030a
rev
versão2.20.1
; use este formatoxxd -revert -plain <<< '030201' | LC_ALL=C rev | tr -d '\n'| xxd -plain
rev
antes da versão2.24
tem um novo erro de linha. mais informações github.com/karelzak/util-linux/commit/...Se o seu sistema possui um
rev
comando.Se tiver um comando
tac
outail -r
:Com
zsh
:(como na
dd
abordagem: troque pares de caracteres, divida na lista de caracteres individuais (s::
), inverta a ordem (Oa
) e junte-se (j::
)).POSIXly:
Ou
Com
perl
:fonte
perl -F'(..)' -lane 'print reverse(@F)'
:)-F
assim. (Eu posso vê-lo descrito nosplit()
manual agora).-F
é basicamente dividir$_
... além de usar regex, como-F'/"\K\|(?=")/'
se pode especificar o número de divisões também ... como-F'/:/,$_,2'
... use()
se o separador precisar ser capturado tambémtr -d '\n'
Com
fold
+tac
+tr
:fold
- dividir a cada 2 bytestac
- gato reversotr
- remover novas linhasfonte
Isso reverte cada linha hexadecimal:
/(..)/g
constrói uma lista com as correspondências capturadasfonte
(por uma questão de completude)
fonte
Com base na resposta de Ipor Sircer https://unix.stackexchange.com/a/321867/337458, eu recomendaria isso no seu
~/.bashrc
para ter um bom comando que você simplesmente pode chamar:fonte