sql >> Database >  >> RDS >> Mysql

Hoe long int efficiënt te converteren naar gestippelde quad IP in bash

Sinds je om Bash vroeg:

INET_NTOA() { 
    local IFS=. num quad ip e
    num=$1
    for e in 3 2 1
    do
        (( quad = 256 ** e))
        (( ip[3-e] = num / quad ))
        (( num = num % quad ))
    done
    ip[3]=$num
    echo "${ip[*]}"
}

INET_ATON ()
{
    local IFS=. ip num e
    ip=($1)
    for e in 3 2 1
    do
        (( num += ip[3-e] * 256 ** e ))
    done
    (( num += ip[3] ))
    echo "$num"
}

Voorbeelden:

$ INET_ATON 10.2.1.255
167903743
$ INET_NTOA 167903743
10.2.1.255

Hier is een versie die zal werken in alle van Bourne afgeleide shells die ik heb geprobeerd, inclusief dash, ksh, verschillende versies van Bash, BusyBox ash, zsh (met -y ) en zelfs de Heirloom Bourne Shell .

INET_NTOA() {
    num=$1
    ip=
    for e in 3 2 1
    do
        quad=`echo "256 ^ $e" | bc`
        if [ -n "$ip" ]
        then
            ip=$ip.
        fi
        ip=$ip`echo "$num / $quad" | bc`
        num=`echo "$num % $quad" | bc`
    done
    ip=$ip.$num
    echo "$ip"
}

INET_ATON ()
{
    num=0
    e=3
    saveIFS=$IFS
    IFS=.
    set -- $1
    IFS=$saveIFS
    for ip in "[email protected]"
    do
        num=`echo "$num + $ip * 256 ^ $e" | bc`
        e=`echo "$e - 1" | bc`
    done
    echo "$num"
}


  1. Fatale fout:oproep naar niet-gedefinieerde functie session_register()

  2. Unieke identifier (guid) als primaire sleutel in databaseontwerp

  3. SQL Server gebruiken als afbeeldingsopslag

  4. MYSQL Toegang geweigerd voor gebruiker 'root'@'localhost'