Bash shell Decimal to Binary base 2 conversion

前端 未结 5 1425
情书的邮戳
情书的邮戳 2020-12-01 06:24

I\'m looking for an easy way in Bash to convert a decimal number into a binary number. I have variables that need to be converted:

$ip1 $ip2 $ip3 $ip4


        
相关标签:
5条回答
  • 2020-12-01 06:40

    You can use bc as:

    echo "obase=2;$ip1" | bc
    

    See it

    0 讨论(0)
  • 2020-12-01 06:43

    General method for converting an integer number into another representation with another base (but base<=10 because of using digits 0..9 for representation, only):

    function convertIntvalToBase () # (Val Base)
    {
       val=$1
       base=$2
       result=""
       while [ $val -ne 0 ] ; do
            result=$(( $val % $base ))$result #residual is next digit
            val=$(( $val / $base ))
       done
       echo -n $result
    }
    

    e.g.

    convertIntvalToBase $ip1 2     # converts $ip1 into binary representation
    
    0 讨论(0)
  • 2020-12-01 06:44

    Convert decimal to binary with bash builtin commands (range 0 to 255):

    D2B=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})
    
    echo ${D2B[7]}
    

    00000111

    echo ${D2B[85]}
    

    01010101

    echo ${D2B[127]}
    

    01111111


    To remove leading zeros, e.g. from ${D2B[7]}:

    echo $((10#${D2B[7]}))
    

    111


    This creates an array with 00000000 00000001 00000010 ... 11111101 11111110 11111111 with bash‘s brace expansion. The position in array D2B represents its decimal value.

    See also: Understanding code ({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})

    0 讨论(0)
  • 2020-12-01 06:48

    Decimal to binary conversion in Bash:

    I'm using Ubuntu 14.04 to do this.

    Convert the decimals 1 through 5 to binary.

    el@apollo:~$ bc <<< "obase=2;1"
    1
    el@apollo:~$ bc <<< "obase=2;2"
    10
    el@apollo:~$ bc <<< "obase=2;3"
    11
    el@apollo:~$ bc <<< "obase=2;4"
    100
    el@apollo:~$ bc <<< "obase=2;5"
    101
    

    Bonus example:

    el@apollo:~$ bc <<< "obase=2;1024"
    10000000000
    
    el@apollo:~$ bc <<< "obase=2;2^128"
    100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    
    0 讨论(0)
  • 2020-12-01 06:54

    Decimal to Binary using only Bash

    Any integer number can be converted ti binary using it::

    touch dec2bin.bash && chmod +x "$_" && vim "$_"
    

    And, then copy paste the following:

    #!/bin/bash
    num=$1;
    dec2bin()
    {
        op=2; ## Since we're converting to binary
        quo=$(( $num/ $op)); ## quotient
        rem=$(( $num% $op)); ## remainder
        array=(); ## array for putting remainder inside array
        array+=("$rem"); ## array expansion
            until [[ $quo -eq 0 ]]; do
                num=$quo; ## looping to get all remainder, untill the remainder is 0
                quo=$(( $num / $op));
                rem=$(( $num % $op));
                array+="$rem"; ## array expansion
            done
        binary=$(echo "${array[@]}" | rev); ## reversing array
        printf "$binary\n"; ## print array
    }
    main()
    {
    [[ -n ${num//[0-9]/} ]] &&
        { printf "$num is not an integer bruv!\n"; return 1;
        } || { dec2bin $num; }
    }
    main;
    

    For example:

    ./dec2bin.bash $var
    110100100
    

    Integer must be added!!

    ./dec2bin.bash 420.py
    420.py is not an integer bruv!
    

    Also, another way using python: Much slower

    python -c "print(bin(420))"
    0b110100100
    

    Hexadecimal to Binary using only Bash

    Similarly, hexadecimal to binary, as follows using only bash:

    #!/usr/local/bin/bash ## For Darwin :( higher bash :)
    #!/bin/bash ## Linux :)
    hex=$1;
    hex2bin()
    {
        op=2; num=$((16#$hex));
        quo=$(( $num/ $op));
        rem=$(( $num% $op));
        array=();
        array+=("$rem");
            until [[ $quo -eq 0 ]]; do
                num=$quo;
                quo=$(( $num / $op));
                rem=$(( $num % $op));
                array+="$rem";
            done
        binary=$(echo "${array[@]}" | rev);
        printf "Binary of $1 is: $binary\n";
    }
    main()
    {
    [[ -n ${hex//[0-9,A-F,a-f]/} ]] &&
        { printf "$hex is not a hexa decimal number bruv!\n"; return 1;
        } || { hex2bin $hex; }
    }
    main;
    

    For example:

    ./hex2bin.bash 1aF
    Binary of 1aF is: 110101111
    

    Hex must be passed:

    ./hex2bin.bash XyZ
    XyZ is not a hexa decimal number bruv!
    
    0 讨论(0)
提交回复
热议问题