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