Ir ao conteúdo

Posts recomendados

Postado

Boa tarde pessoal.

 

Estou desenvolvendo em C, um código onde recebe de entrada o endereço de IP e a máscara de rede.

Preciso retornar, o IP em binário, a máscara de rede em binário, o endereço de rede, broadcast e wildcard.

 

Até o momento, estou transformando em binário sem problemas.

Porém, não consigo fazer com que apareca o binário na ordem correta ao usuario.

Necessito da ordem para calcular o endereço de rede, broadcast e wildcard.

 

Agradeço desde já todas as ajudas.

 

Obrigado !!

 

;)

binario.txt

Postado

Você pode criar uma string para ir armazenando os bits da direita para a esquerda, ou seja do penúltimo char da string até o primeiro.

Segue o meu código, veja se ajuda.

    int byte[3], i, b;    char ip_binario[27] = "", *s = ip_binario;        printf("Endereco (xxx.xxx.xxx): ");    scanf("%d.%d.%d", &byte[0], &byte[1], &byte[2]);        s += 25;            for(b = 2; b >= 0; b--){        i = 8;        while(i--){                        *s-- = !(byte[b] % 2) ? '0' : '1';                        byte[b] /= 2;                    }        if( *s-- = '.';    }    printf("Endereco na forma binaria: %s\n", ++s);    return 0;
  • Solução
Postado

Para facilitar, tirei o ponteiro e uso apenas vetor

    int byte[3], b, i, x = 25;    char ip_binario[27] = "";        printf("Endereco (xxx.xxx.xxx): ");    scanf("%d.%d.%d", &byte[0], &byte[1], &byte[2]);    for(b = 2; b >= 0; b--){        i = 8;        while(i--){                     ip_binario[x--] = (byte[b] % 2) ? '1' : '0';                        byte[b] /= 2;                    }        if( ip_binario[x--] = '.';    }    printf("%s\n", ip_binario);    return 0;
Postado

Olliver, estou precisando de mais uma ajuda, se possível.

Estou tentando calcular o endereco de rede, que se da pelo binario do IP x (vezes) o binario da mascara de rede.

 

Estou utilizando o for que fica na linha 97 para isso.

Mas, na hora de exibir o resultado, não obtive sucesso.

 

Link : https://www.sendspace.com/file/lzp4pn

 

Obrigado !

Postado

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

    int byte[4], b, i, x = 34;

    int bytes[4], c, o, z = 34;

    int ipdecimal[4];

    char mascara_binario[36] = "";

    char ip_binario[36] = "";

    char wildcard[36] = "";

    char enderecoderede[36] = "";

    int op, d, cont, pot;

    do

    {

        printf("\n\nSeja bem vindo ao conversor de IP decimal para binario !");

        printf("\n1. Para digitar o IP e a Mascara de Rede");

        printf("\n2. Sair");

        printf("\nUsuario, por favor, digite a sua opcao: ");

        scanf("%d", &op);

        switch(op)

        {

        case 1:

            printf("\nDigite o endereco do seu IP: (XXX.XXX.XXX.XXX) ");

            scanf("%d.%d.%d.%d",&byte[0], &byte[1], &byte[2], &byte[3]);

            ipdecimal[0]=byte[0];

            ipdecimal[1]=byte[1];

            ipdecimal[2]=byte[2];

            ipdecimal[3]=byte[3];

            printf("\nDigite o endereco da sua Mascara de Rede: (XXX.XXX.XXX.XXX) ");

            scanf("%d.%d.%d.%d",&bytes[0], &bytes[1], &bytes[2], &bytes[3]);

            for(b = 3; b >= 0; b--) //calculo da rede em binario

            {

                i = 8;

                while(i--)

                {

                    ip_binario[x--] = (byte % 2) ? '1' : '0';

                    byte /= 2;

                }

                if( B) ip_binario[x--] = '.';

            }

            for(c=3; c>= 0; c--) //calculo da mascara em binario

            {

                o = 8;

                while(o--)

                {

                    mascara_binario[z--] = (bytes[c] % 2) ? '1' : '0';

                    bytes[c] /= 2;

                }

                if© mascara_binario[z--] = '.';

            }

            for(d=0 ; d<36 ; d++) //popularizando o vetor wildcard com o valor da mascara de rede

            {

                wildcard[d]=mascara_binario[d];

            }

            for(d=0 ; d<36 ; d++) //calculando o wildcard (negação da mascara)

            {

                if(wildcard[d] == '1')

                {

                    wildcard[d] = '0';

                }

                else

                {

                    if(wildcard[d] == '0')

                    {

                        wildcard[d] = '1';

                    }

                }

            }

            cont=0;

            pot=0;

            for(d=28 ; d<=36 ; d++) //contador

            {

                if(wildcard[d] == '1')

                {

                    cont++;

                }

            }

            pot = pow(2, cont);

            pot = pot-1;

            /*

            for(d=0 ; d<36 ; d++){

                enderecoderede[d]=ip_binario[d]*mascara_binario[d];

            }

            */

            for(d=0 ; d<36 ; d++) // calculo de endereco de rede

            {

                if(ip_binario[d]==mascara_binario[d])

                {

                    enderecoderede[d]=ip_binario[d];

                }

                else

                {

                    enderecoderede[d]='0';

                }

            }

            printf("O seu ip em binario e: %s\n", ip_binario);

            printf("A sua mascara em binario e: %s\n", mascara_binario);

            printf("O seu wildcard e: %s\n", wildcard);

            printf("O seu broadcast e: %d.%d.%d.%d\n", ipdecimal[0], ipdecimal[1], ipdecimal[2], pot);

            printf("O seu endereco de rede e: %s\n", enderecoderede);

            printf("%d %d", pot, cont);

        }

    }

    while(op!=2);

}

 

 

 

Fiz usando uma comparação, pois multiplicando para descobrir o endereço de rede não deu certo.

Olliver, porque utilizamos o "?" e "/="?

 

Linha 52/53?

 

Abraços !

Postado

Na multiplicação você está tentando efetuar a operação com char

enderecoderede[d]=ip_binario[d]*mascara_binario[d];
Você precisa converter para inteiro antes, para isso pode subtrair pelo char '0' e depois somar '0' para converter para char novamente:

enderecoderede[d] = ((ip_binario[d] - '0') * (mascara_binario[d] - '0')) + '0';
Quanto ao '?', se trata de um operador ternário ?: É tipo um if-else

Por exemplo, na linha abaixo atribuo 1 a y, caso x seja maior que 10. Caso contrário o valor atribuido sera 0.

y = x > 10 ? 1 : 0;
Quanto ao /=, é a forma resumida de divir, por exemplo

x = x / 2

é o mesmo que

x /= 2

  • 3 anos depois...
Postado

Boa tarde! 

Estou desenvolvendo em C, um código onde recebe de entrada do endereço de IP.

Preciso pegar a sequencia de bits do IP e retornar o endereço IP? 

Agradeço desde já todas as ajudas.

 

Obrigada !!

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!