Преобразовать данные base64 в десятичные - PullRequest
0 голосов
/ 18 октября 2018
CANMIC_BASE64_DATA="FxEYEhkTGhQbFRwWIQcBCAIJAwoECwUMBjEHAQgCCQMKBAsFDAYAgICAgICAgICAgICAAICAgICAgICAgICAgAu003du003d"
CANMIC_HEX_DATA=$(base64 -d -i <<<$CANMIC_BASE64_DATA | hexdump -v -e '/1 "%02x," ')

Я получаю шестнадцатеричные данные в CANMIC_BASE64_DATA* и затем сохраняю эти данные в массиве

array_len=${#array[@]}

Как только я сохраняю их в массиве, они сохраняются как десятичные числа.Но у меня это должно было быть в гексе только в массиве.Мне нужно преобразовать base64 в десятичное число, похожее на CANMIC_HEX_DATA dumping.

1 Ответ

0 голосов
/ 18 октября 2018

Учитывая вашу строку в кодировке base64, вы можете назначить каждый байт массиву.

Либо вы назначаете массив с шестнадцатеричными значениями:

arr1=($(base64 -d <<< "FxEYEhkTGhQbFRwWIQcBCAIJAwoECwUMBjEHAQgCCQMKBAsFDAYAgICAgICAgICAgICAAICAgICAgICAgICAgAu003du003d" | hexdump -v -e '/1 "0x%02x " '))
printf "%s" "${arr1[0]}"
0x17
printf "%d" "${arr1[0]}"
23
printf "%x" "${arr1[0]}"
17

Либо вы назначаете свой массив с десятичными значениями:

arr2=($(base64 -d <<< "FxEYEhkTGhQbFRwWIQcBCAIJAwoECwUMBjEHAQgCCQMKBAsFDAYAgICAgICAgICAgICAAICAgICAgICAgICAgAu003du003d" | hexdump -v -e '/1 "%02d " '))
$ printf "%s" "${arr2[0]}"
23
$ printf "%d" "${arr2[0]}"
23
$ printf "%x" "${arr2[0]}"
17

Единственное отличие - формат hexdump.

Обратите внимание, что вы не можете иметь дело с двоичным файлом напрямую с переменной, так как оболочка откажется принять его.

Например, при использовании bash попытка var="$(echo -e "\x00")" приведет к ошибке bash: warning: command substitution: ignored null byte in input

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...