Estoy tratando de convertir una serie de bytes de hexadecimal a bin usando bash.
pero sigo recibiendo (aparentemente al azar) «(standard_in) 1: error de sintaxis» respuestas desde el siguiente código:

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

Yo hice algo parecido con las dism a bin, el cual funciona perfectamente bien:

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

¿Alguien tiene una idea de por qué funciona con decimales, pero no con hex?
En mi opinión, la sintaxis es prácticamente el mismo (a menos que me estoy perdiendo algo realmente duro.)

OriginalEl autor fragman | 2012-06-20

2 Comentarios

  1. 16

    BC es un poco sensible para el caso de valores hexadecimales, cambiar a mayúsculas y se debe trabajar

    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

    De salida:

    11000100
    10010111
    10010001
    10001100
    10000101
    10000111
    11000100
    10010000
    10001100
    10001101
    10011010
    10000011
    10000001
    así que realmente fue un simple error. gracias por señalarlo, funciona como un encanto.
    me alegro de ayudar, A.C. es una gran herramienta con algunas peculiaridades que sólo se tiene que saber 🙂
    ¿Alguien sabe cómo almohadilla de ac de salida a un determinado número de dígitos? Esto no es necesario en el ejemplo anterior, sino sólo tratar el bucle con un 00 como entrada.
    eche un vistazo a la length función. «El valor de la función length es el número de dígitos significativos en la expresión.»

    OriginalEl autor

  2. 4

    Aquí está el script que uso:

    #!/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 "3[1mHEX                 \t\t BINARY3[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
    Advertencias: Los números hexadecimales debe ser precedida por 0x, y la HEX de la columna en realidad listas de valores decimales. Pero gracias por ofrecer un puro bash solución a un «Cómo … en bash» pregunta! A veces eso es realmente lo que la gente está buscando. No siempre se puede depender de la presencia de herramientas como ac.
    la versión de bash estoy usando (4.4.12) no necesita agregar un prefijo a los números hexadecimales. La secuencia de comandos no manejar 0 correctamente, sin embargo, usted desea reemplazar $Binary con ${Binary:-0} en los últimos echo llamada

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here