kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Kerby82
Kerby82
Вопрос

Преобразование шестнадцатеричной строки в ascii в командной строке bash

У меня много таких строк, и я хочу найти команду для преобразования их в ascii, я пробовал с echo -e и od, но ничего не получилось.

0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2
38 2012-10-31T14:33:38+00:00 6
ДМИТРИЙ МАЛИКОВ
ДМИТРИЙ МАЛИКОВ
Редактировал вопрос 31-го октября 2012 в 3:46
Программирование
bash
hex
 funroll
funroll
6-го мая 2015 в 5:58
2015-05-06T17:58:56+00:00
Дополнительно
Источник
Редактировать
#17605792

Это сработало для меня.

$ echo 54657374696e672031203220330 | xxd -r -p
Testing 1 2 3$

-r указывает программе преобразовать шестнадцатеричный код в ascii, в отличие от обычного режима, когда все происходит наоборот.

-p указывает ему использовать обычный формат.

 funroll
funroll
Редактировал ответ 10-го мая 2015 в 3:34
116
0
Решение / Ответ
Dan Bliss
Dan Bliss
31-го октября 2012 в 5:33
2012-10-31T17:33:07+00:00
Дополнительно
Источник
Редактировать
#17605790

Этот код преобразует текст 0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2 в поток из 11 байтов с эквивалентными значениями. Эти байты будут записаны в стандартный выход.

TESTDATA=$(echo '0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2' | tr '.' ' ')
for c in $TESTDATA; do
    echo $c | xxd -r
done

Как отмечали другие, в результате не получится печатаемая строка ASCII по той простой причине, что указанные байты не являются ASCII. Чтобы мы могли вам помочь, опубликуйте более подробную информацию о том, как вы получили эту строку.

Как это работает: xxd -r переводит шестнадцатеричные данные в двоичные (как обратный hexdump). xxd требует, чтобы каждая строка начиналась с индексного номера первого символа в строке (запустите hexdump на чем-нибудь и посмотрите, как каждая строка начинается с индексного номера). В нашем случае мы хотим, чтобы этот номер всегда был нулевым, поскольку в каждом выполнении есть только одна строка. К счастью, наши данные уже имеют нули перед каждым символом, как часть обозначения 0x. Нижний регистр x игнорируется xxd, поэтому все, что нам нужно сделать, это передать каждый символ 0xhh в xxd и позволить ему выполнить работу.

tr переводит периоды в пробелы, чтобы for правильно разделил их.

20
0
Raghu Sodha
Raghu Sodha
18-го июля 2016 в 6:14
2016-07-18T18:14:01+00:00
Дополнительно
Источник
Редактировать
#17605793

Вы можете использовать что-то вроде этого.

в

$ cat test_file.txt
54 68 69 73 20 69 73 20 74 65 78 74 20 64 61 74 61 2e 0a 4f 6e 65 20 6d 6f 72 65 20 6c 69 6e 65 20 6f 66 20 74 65 73 74 20 64 61 74 61 2e

$ for c in `cat test_file.txt`; do printf "\x$c"; done;
This is text data.
One more line of test data.
Paul Roub
Paul Roub
Редактировал ответ 18-го июля 2016 в 6:30
5
0
 Yokai
Yokai
24-го февраля 2018 в 12:28
2018-02-24T12:28:22+00:00
Дополнительно
Источник
Редактировать
#17605794

В значений значения UTF-8. При установке массива:

declare -a ARR=(0xA7 0x9B 0x46 0x8D 0x1E 0x52 0xA7 0x9B 0x7B 0x31 0xD2)

Будет разобрано для печати текстовых символов каждого значения.

for ((n=0; n < ${#ARR[*]}; n++)); do echo -e "\u${ARR[$n]//0x/}"; done

А на выходе будет давать несколько печатных символов и некоторых непечатаемых символов, как показано здесь:

Введите описание изображения здесь

Для преобразования шестнадцатеричного значения в обычный текст с помощью команды "Эхо":

echo -e "\x<hex value here>"

И для преобразования значения UTF-8 в обычный текст с помощью " эхо " команды:

echo -e "\u<UTF-8 value here>"

А затем для преобразования восьмеричных в обычный текст с помощью команды "Эхо":

echo -e "\0<octal value here>"

Когда у вас есть значения кодирования вы'т знакомы, не торопитесь, чтобы проверить диапазоны в общие схемы кодирования, чтобы определить, что кодирование значение принадлежит. После конвертирования есть кнопка.

5
0
Alexander Amelkin
Alexander Amelkin
2-го декабря 2014 в 4:11
2014-12-02T16:11:50+00:00
Дополнительно
Источник
Редактировать
#17605791

Должно быть, echo -e не работает из-за неправильного экранирования. Следующий код работает нормально на аналогичном выводе из вашей_программы с аргументами:

echo -e $(your_program with arguments | sed -e 's/0x\(..\)\.\?/\\x\1/g')

Однако обратите внимание, что ваша исходная шестнадцатеричная строка состоит из непечатаемых символов.

2
0
Cleber Nunes
Cleber Nunes
15-го октября 2019 в 12:54
2019-10-15T12:54:30+00:00
Дополнительно
Источник
Редактировать
#17605795

Сделать скрипт вроде этого:

" и#!/бин/Баш

Эхо $((0х$1)).$((0х$2)).$((0х$3)).$((0х$4))"и

Пример:

на "Ш converthextoip.sh ц0 А8 00 0В"и

Результат:

192.168.0.11

0
0
Похожие сообщества 1
pro.bash
pro.bash
511 пользователей
All about Nix shells, signals, processes and development in general.
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Денис Васьков
Зарегистрирован 17 часов назад
2
Dima Patrushev
Зарегистрирован 2 дня назад
3
sirojidddin otaboyev
Зарегистрирован 1 неделю назад
4
Елена Гайдамамакинат
Зарегистрирован 1 неделю назад
5
Иван Степанюк
Зарегистрирован 1 неделю назад
DE
ES
ID
JA
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией