Convertire indirizzo ip da stringa a binario decimale in C/C++

0 condivisioni

Questo post nasce dall’esigenza che ho avuto per motivi scolastici di dover convertire un indirizzo ip passato come stringa in indirizzo ip in binario decimale (non binario stringa, anche se è quasi uguale). Ho perso molto tempo per trovare questa soluzione che sicuramente non è ottimizzata, però funziona! Così voglio risparmiare a chiunque stia cercando una cosa simile, ogni fatica e tempo perso inutilmente, senza contare il nervoso!!!
Praticamente gli passo un indirizzo ip (preimpostato): 10.0.255.10
e lui mi ritorna un indirizzo ip binario: 00001010.00000000.11111111.00001010

Ecco il codice da salvare come nomefile.cpp

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

 int main(){
 char str[] = "10.0.255.10"; //stringa che andremo a leggere nel pacchetto
	char *i = str;
	char **moreStr = NULL;
	char primo[9],secondo[9],terzo[9],quarto[9];
	int k=0;
	int ip[4];

	int nDot = 0;

	while( *i++ != '\0' )
	{
		if( *i == '.' )
			++nDot;
	}

	moreStr = (char **) malloc( (nDot+1) * sizeof(char *) );

	if( moreStr != NULL )                       //separa l'ip nei 4 ottetti
	{
		int pos = 0;
		i = str;
		moreStr[ pos++ ] = i;

		while( *i++ != '\0' )
		{
			if( *i == '.' )
			{
				*i = '\0';
				moreStr[ pos++ ] = ++i;
			}
		}

     //converte gli ip in decimale
        for (k=0;k<4;k++)
            ip[k]=atoi(moreStr[k]);   

        int n,r=0,bin[4][10],l=0,z;       //bin è la matrice che rappresenta gli ottetti dell'ip
        int j=7;

        //mette a 0 tutti i valori, così avrò gli indirizzi a 8 cifre (compresi gli 0 )
        for(z=0;z<4;z++){
            j=7;
            r=0;
            n=ip[z];
        for(l=0;l<8;l++)
            bin[z][l]=0;

        //trasforma in binario
        while (n>0) {
        int r = n %2;
            bin[z][j] = r;
            n = n/2;
            j--;
        }

        //stampa gli ottetti uno alla volta
        printf("ottetto %d: ",z);
        for (l=0;l<8;l++)
            printf("%d",bin[z][l]);
        printf("\n");
        }

        //stampa l'ip completo in binario
        printf("Indirizzo ip completo: ");
        for(z=0;z<4;z++){
            for(l=0;l<8;l++){
                printf("%d",bin[z][l]);
            }
            if(z<3)
                printf(".");
        }
        printf("\n");
	}
	return 0;
}


Spero di esserti stato d’aiuto :lol:

Sponsor

VUOI CREARE IL TUO SITO O BLOG WORDPRESS?

HOSTING

Scegli uno tra i migliori hosting per WordPress

Hosting

GRAFICA

Scegli uno tra i migliori temi WordPress professionali

Grafica

GESTIONE

Guide e risorse per gestire il sito WordPress a 360°

Gestione

EMAIL NEWSLETTER

Vuoi ricevere i miei ultimi articoli
comodamente nella tua email? È gratis!
Ben 741 persone lo stanno già facendo!
   
con le dita sempre in costante, frenetico movimento sulla tastiera… vengo spesso trascinato e catturato “in rete” per colpa delle mille idee che mi girano per la testa (prima o poi troverò quella giusta)… dal futuro incerto (nonostante una laurea, e chi non lo è?..siamo in tanti!) .. credo fortemente nella condivisione della conoscenza!
  • che nerd!!

    • già :) e te come ci sei finito qui??? sei proprio come me ;)

      • è un vizio di “famiglia” :)

Lascia un commento

... i tempi di risposta potrebbero essere anche molto (ma molto) lunghi

sponsor

Scarica gli ebook gratuiti

Vuoi creare e gestire il tuo blog WordPress autonomamente ed in maniera gratuita? Magari sfruttando anche i motori di ricerca e i Social Media?

Allora scarica gratuitamente gli ebook Blogging Box e Le 30+ cose da non fare con WordPress, inserisci la tua email qui sotto:
1639+

Per maggiori informazioni guarda questa pagina per la Blogging Box e questa per le 30+ cose da non fare con WordPress.

Seguimi

Consiglio l’hosting

Scarica gli ebook gratuiti

Scarica gratuitamente gli ebook Blogging Box e Le 30+ cose da non fare con WordPress, inserisci la tua email qui sotto:
1639+

Per maggiori informazioni guarda questa pagina per la Blogging Box e questa per le 30+ cose da non fare con WordPress.