Compare array character

1

I'm developing an IP calculator in PHP. I have a mask array in binary, with 4 positions and in each position has 8 characters, I want to compare each character of each position to know if the bit is set. Is there any function that does this? Or another way? I thought about changing this array with 32 positions and each position having only one character, but I would have to change all my code.

    
asked by anonymous 30.06.2017 / 15:53

1 answer

2

For the scope of the question I created this small example:

<?php
$ip_1 = ['11000000', '10101000', '00000001', '00000001'];

//transforma cada octeto em um array de strings
$octeto1 = str_split($ip_1[0]);
$octeto2 = str_split($ip_1[1]);
$octeto3 = str_split($ip_1[2]);
$octeto4 = str_split($ip_1[3]);

verificarBit($octeto1);
verificarBit($octeto2);
verificarBit($octeto3);
verificarBit($octeto4);

/**
para verificar se um bit está setado penso que basta verificar se ele
é igual a 1 (digito binário)
*/
function verificarBit($octeto){
    for($i = 0; $i < count($octeto); $i++){
        if($octeto[$i] === '1'){
            echo 'está setado <br>';
        }else{
            echo 'não setado <br>';
        }
    }
}

/**
eventualmente você pode usar funções de conversão entre bases numericas
Como por exemplo decbin(int numero) que converte de decimal para binario.
bindec(string binario) que converte de binario para decimal

@param $ip array array com quatro octetos ['binario', 'binario', 'binario', 'binario']
@return array [numero, numero, numero, numero]
*/
function converterIpParaDecimal($ip){
    $ip_numerico = [];
    foreach($ip as $octeto){
        $ip_numerico[] = bindec($octeto);
    }
    return $ip_numerico;
}

//testando conversão
$ip_numerico = converterIpParaDecimal($ip_1);
echo '<br><br>';
echo $ip_numerico[0] . '.' . $ip_numerico[1] . '.' . $ip_numerico[2] . '.' . $ip_numerico[3];

I do not know what the features of your calculator are, but the functions presented should support implementation.

    
01.07.2017 / 03:51