将base64数据转换为十进制

时间:2018-10-18 03:05:07

标签: linux shell unix

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转储的十进制。

1 个答案:

答案 0 :(得分:0)

给出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格式。

请注意,您不能直接使用变量处理二进制文件,因为shell会拒绝接受它。

例如,使用bash尝试var="$(echo -e "\x00")"将导致错误bash: warning: command substitution: ignored null byte in input