Hex to Binary conversion in bash

后端 未结 4 1016
说谎
说谎 2021-02-20 14:08

I\'m trying to convert a series of bytes from hex to bin using bash. but I keep getting (seemingly random) \"(standard_in) 1: syntax error\" replies from the following code:

相关标签:
4条回答
  • 2021-02-20 14:25

    Try this:

    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
    
    0 讨论(0)
  • 2021-02-20 14:39

    Here's the script I use:

    #!/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
    
    0 讨论(0)
  • 2021-02-20 14:42

    BC is a bit sensitive to case for hex values, change to uppercase and it should work

    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
    

    Output:

    11000100
    10010111
    10010001
    10001100
    10000101
    10000111
    11000100
    10010000
    10001100
    10001101
    10011010
    10000011
    10000001
    
    0 讨论(0)
  • 2021-02-20 14:44

    I came up with this:

    printf converts to hex, xxd -r -p takes the ascii hex stream and makes it actual binary

    dumping with hexdump to prove it worked...

    printf "%016x" 53687091200 | xxd -r -p | hexdump -C
    
    0 讨论(0)
提交回复
热议问题