Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C++] convertire indirizzo ip in binario

    ciao a tutti, chi sa dire come faccio a convertire un indirizzo ip che mi viene passato come stringa, in indirizzo ip in binario?

    del tipo 0.0.0.10 ---> 00000000.00000000.00000000.00001010 ?

    grazie mille

  2. #2
    Devi prima di tutto convertire le singole componenti dell'IP in interi (puoi usare un istringstream), e quindi convertirle in binario (l'algoritmo è molto semplice, sono sicuro che ci puoi arrivare da solo).
    Per inciso, a cosa ti serve la conversione in binario?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Riallacciandomi a quello che ha detto MItaly, se ci sono problemi qua c'è un esempio in C++. Ma a cosa ti serve?

    codice:
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <sstream>
    
    
    
    
    std::vector <unsigned> IPtoBin( std::string &text )
    {
    	delDot( text );
    
    	return dectobin( stouint(text) );
    }
    
    
    
    void delDot( std::string &text )
    {
    	std::string::size_type pos = text.find(".");
    	
    	while( pos != std::string::npos )
    	{
    		std::string::const_iterator it = text.begin() + pos;
    		text.erase( it );
    
    		pos = text.find(".");
    	}
    }
    
    
    unsigned stouint( const std::string &text )
    {
    	std::stringstream sstream;
    	sstream << text;
    
    	unsigned uint;
    	sstream >> uint;
    
    	return uint;
    }
    
    
    std::vector <unsigned> dectobin( unsigned uint )
    {
    	typedef std::vector <unsigned>::size_type VectorSize;
    
    	std::vector <unsigned> binary;
    
    	for( VectorSize value = 1; value <= uint; value *= 2 )
    		binary.push_back(value);
    
    	std::reverse( binary.begin(), binary.end() );
    
    
    	VectorSize myVectSize = binary.size();
    
    	for( VectorSize i = 0; i != myVectSize; ++i )
    	{
    		unsigned temp = binary[ i ];
    		binary[ i ] = uint / binary[ i ];
    		uint = uint % temp;
    	}
    
    	return binary;
    }
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  4. #4
    grazie, mi serve per un progetto scolastico.... mi arriva un pacchetto, leggo l'indirizzo ip sotto forma di stringa e poi devo lavorare sui singoli bit.

    Ho provato il codice ma mi dice unable to open include file 'sstream.h'

    Provo ad utilizzare un altro programma, magai c++ primer e poi vi faccio sapere come va.

    Se no ho trovato un codice che mi converte una stringa di numeri in binario,

    codice:
    #include <stdio.h>
    
    #define LEN_BINSTR_INT    (sizeof (int)*8)
    
    
    //funzione che converte in binario passandogli un valore in decimale
    char *binstr_int (char *bufout, int value)
    {
        unsigned int m;
        char *ret = bufout;
    
        for (m=1<<(LEN_BINSTR_INT-1); m!=0; m>>=1)
            *bufout++ = value & m ? '1' : '0';
        *bufout = '\0';
    
        return ret;
    }
    
    
    
    int main (void)
    {
        char str[LEN_BINSTR_INT+1];          //il +1 serve per il /0 che è il terminatore della stringa
    
        printf ("%s\n", binstr_int (str, 255));
    
    
        return 0;
    }
    ma il problema è che non riesco a dividere l'ip in 4 sottostringhe divise dal '.' ... C'è una funzione che divide la stringa che gli passo in base al carattere separatore? ho provato a cercare e ho trovato la funzione split, ma non sono riuscito ad implementarla

  5. #5
    Che compilatore/IDE usi?

    Ma lo devi fare in C o in C++?
    Perchè anche se non sembra le cose possono cambiare decisamente...

    Basandomi sul titolo della discussione ti posso dire che la classe std::string implementa metodi che possono esserti utili (se guardi il mio esempio, fatto proprio per avere una base "didattica", te ne renderai conto).

    Guardati: string
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  6. #6
    Originariamente inviato da 88prototipo
    grazie, mi serve per un progetto scolastico.... mi arriva un pacchetto, leggo l'indirizzo ip sotto forma di stringa e poi devo lavorare sui singoli bit.

    Ho provato il codice ma mi dice unable to open include file 'sstream.h'
    La direttiva è
    codice:
    #include <sstream>
    , senza il .h (qualora ce l'avessi aggiunto tu).
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    utilizzo Borland C++ 5.02 (è un po' vecchiotta come versione) e devo farlo in C++.

    Per il problema sstream.h, io ho solo copiato il codice che mi ha postato GliderKite, senza alcuna modifica... Però mi ha dato questo problema

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da 88prototipo
    utilizzo Borland C++ 5.02 (è un po' vecchiotta come versione) e devo farlo in C++.
    Installa qualcosa di più dignitoso e non avrai quel problema.
    every day above ground is a good one

  9. #9
    era quello che usavo 6 anni fa
    ora installo dev-C++

  10. #10
    Originariamente inviato da 88prototipo
    era quello che usavo 6 anni fa
    ora installo dev-C++
    Dev-C++ è un progetto non più attivo, oltretutto personalmente non lo trovo proprio il massimo...

    Se hai la possibilita ti consiglio: VS express edition (Visual C++)
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.