2011-02-03 12 views
6

Ho una stringa di 8 caratteri lunga che contieneutilizzando contenitore bitset in C++

8 byte dump esadecimale è

è 801000000000000

Significa bit 1 e 12 è acceso.

Come posso usare la funzionalità bitset in C++ e semplificarmi la vita.

Grazie

+4

Qual è la domanda? Non vedo '' 'dentro. – karlphillip

+0

@karlphillip ..any? * lì dentro. –

risposta

7

Per fare cosa? Dov'è la domanda? Non posso davvero dare un buon esempio di "come renderà la vita più facile" senza problemi da risolvere. Tutto quello che posso fare è mostrarti le basi di come funziona la classe nell'applicazione.

Ecco un collegamento sul suo interface. Se si desidera gestire solo un insieme di bit di dimensioni semplici e costanti, è possibile crearne uno facilmente. Se vuoi uno che può crescere o restringersi, guarda a Boost. Ecco un rapido esempio con il bitset di serie:

std::bitset<40> imFiveBytesLong; 

imFiveBytesLong.set(0, true); 

Ora sembra

0000000000000000000000000000000000000001 

con il bit set 0a. E si può verificare se è impostato il bit chiedendo:

bool isItSet = imFiveBytesLong.test(0); 

Oppure si può contare il numero di bit impostati chiedendo:

std::size_t numSet = imFiveBytesLong.count(); 

Edit:

Per rispondere il tuo commento qui sotto controlla il metodo to_ulong di bitset e uno dei constructors di bitset. Mettiamola insieme:

int main() 
{ 
    std::bitset<10> mySet(120ul);   // initialize from unsigned long 

    std::cout << mySet.to_uLong();   // print as an unsigned long 

    return 0; 
} 
+0

Come posso rendere la mia stringa perfettamente senza firma e inizializzare da unsigned long? – user79292