Есть ли простая команда для изменения шестнадцатеричного числа?
Например, учитывая шестнадцатеричное число:
030201
Выход должен быть:
010203
Используя rev
команду, я получаю следующее:
102030
Обновить
$ 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
Иньяки Мурильо
источник
источник
010203
как шестнадцатеричный, хотя я и не использую0x
Ответы:
Вы можете преобразовать его в двоичный файл , обратить байты , при желании удалить завершающие символы новой строки
rev
<2,24 и преобразовать обратно:С помощью
Это не работает, если строка содержит байт NUL, потому что
rev
будет обрезать вывод в этой точке.источник
0102030a
вместо010203
0102030a
rev
версии2.20.1
; использовать этотxxd -revert -plain <<< '030201' | LC_ALL=C rev | tr -d '\n'| xxd -plain
rev
до версии2.24
есть новая строка ошибки. больше информации github.com/karelzak/util-linux/commit/…Если в вашей системе есть
rev
команда.Если есть команда
tac
илиtail -r
:С
zsh
:(как в
dd
подходе: поменять пары символов, разбить на список отдельных символов (s::
), изменить порядок (Oa
) и объединить (j::
)).POSIXly:
Или
С
perl
:источник
perl -F'(..)' -lane 'print reverse(@F)'
:)-F
. (Я вижу это описано вsplit()
руководстве сейчас).-F
это в основном разделение на$_
... кроме использования регулярных выражений, например,-F'/"\K\|(?=")/'
можно также указать количество разделений ... например-F'/:/,$_,2'
... использовать,()
если разделитель также должен быть захваченtr -d '\n'
С
fold
+tac
+tr
:fold
- разделить каждые 2 байтаtac
- обратный котtr
- удалить переводы строкисточник
Это возвращает каждую шестнадцатеричную строку:
/(..)/g
строит список с захваченными матчамиисточник
(для полноты картины)
источник
На основании ответа Ипора Сирсера https://unix.stackexchange.com/a/321867/337458, я бы порекомендовал вам это,
~/.bashrc
чтобы у вас была хорошая команда, которую вы можете просто вызвать:источник