12

bashを使用して一連のバイトを16進数からbinに変換しようとしています。しかし、私は次のコードから(一見ランダムに)「(standard_in)1:構文エラー」の応答を受け取り続けます:

for j in c4 97 91 8c 85 87 c4 90 8c 8d 9a 83 81
do
        BIN=$(echo "obase=2; ibase=16; $j" | bc )
        echo $BIN
done

dec to binで同様のことを行いましたが、これは完全に正常に機能します。

for i in {0..120}
do
        KEYBIN=$(echo "obase=2; ibase=10; $i" | bc)
        echo $KEYBIN
done

なぜそれが10進数で機能するのに、16進数では機能しないのか誰かが知っていますか?私の意見では、構文はほとんど同じです(本当に難しいものが欠けている場合を除きます)。

4

4 に答える 4

18

BCは、16進値の大文字と小文字に少し敏感です。大文字に変更すると、機能するはずです。

for j in C4 97 91 8C 85 87 C4 90 8C 8D 9A 83 81
do
        BIN=$(echo "obase=2; ibase=16; $j" | bc )
        echo $BIN
done

出力:

11000100
10010111
10010001
10001100
10000101
10000111
11000100
10010000
10001100
10001101
10011010
10000011
10000001
于 2012-06-20T13:27:17.740 に答える
7

私はこれを思いついた:

printfは16進数に変換され、xxd-r-pはASCIIの16進数ストリームを取得して実際のバイナリにします

それが機能したことを証明するためにhexdumpでダンプします...

printf "%016x" 53687091200 | xxd -r -p | hexdump -C
于 2019-11-22T16:20:10.690 に答える
4

私が使用するスクリプトは次のとおりです。

#!/bin/bash
# SCRIPT:  hex2binary.sh
# USAGE:   hex2binary.sh Hex_Number(s)
# PURPOSE: Hex to Binary Conversion. Takes input as command line
#          arguments.
#####################################################################
#                      Script Starts Here                           #
#####################################################################

if [ $# -eq 0 ]
then
    echo "Argument(s) not supplied "
    echo "Usage: hex2binary.sh hex_number(s)"
else
    echo -e "\033[1mHEX                 \t\t BINARY\033[0m"

    while [ $# -ne 0 ]
    do
        DecNum=`printf "%d" $1`
        Binary=
        Number=$DecNum

        while [ $DecNum -ne 0 ]
        do
            Bit=$(expr $DecNum % 2)
            Binary=$Bit$Binary
            DecNum=$(expr $DecNum / 2)
        done

        echo -e "$Number              \t\t $Binary"
        shift
        # Shifts command line arguments one step.Now $1 holds second argument
        unset Binary
    done

fi
于 2012-06-20T13:31:26.347 に答える
0

これを試して:

for j in c4 97 91 8c 85 87 c4 90 8c 8d 9a 83 81
do
    BIN=$(echo "obase=2; ibase=16; ${j^^}" | bc )
    echo $BIN
done
于 2019-10-13T14:52:37.517 に答える