Convertir en Tableau d'Octets en Bitset
J'ai un tableau d'octets générés par un générateur de nombre aléatoire. Je veux tout mettre dans la STL bitset.
Malheureusement, il ressemble à Bitset seulement prend en charge les constructeurs:
- Une chaîne de 1 et de 0 comme "10101011"
- Un unsigned long. (mon tableau d'octets sera plus long)
La seule solution que je peux penser maintenant, c'est de lire le tableau d'octets peu à peu et de faire une chaîne de 1 et de 0. Quelqu'un aurait-il une solution plus efficace?
Vous devez vous connecter pour publier un commentaire.
Quelque chose comme cela? (Pas sûr si le modèle de la magie fonctionne ici comme je l'avais espérer. Je suis rouillé en C++.)
Il y a un 3ème constructeur pour
bitset<>
- il ne prend aucun paramètre et définit tous les bits à 0. Je pense que vous aurez besoin de l'utiliser ensuite à pied à travers la matrice d'appelset()
pour chaque bit dans le tableau d'octets qui est un 1.Un peu de force brute, mais ça marchera. Il y aura un peu de complexité pour convertir l'octet de l'index et de bits de décalage à l'intérieur de chaque octet à un bitset index, mais rien qu'un peu de réflexion (et peut-être une course à travers sous le débogueur) ne suffit pas à résoudre. Je pense que c'est probablement plus simple et plus efficace que d'essayer d'exécuter le tableau par le biais d'une chaîne de conversion ou d'un ruisseau.
Les gars, j'ai passé beaucoup de temps par l'écriture d'une fonction d'inversion (bitset -> byte/char array). Ça y est:
Bien, soyons honnête, je me suis ennuyé et a commencé de penser qu'il devait être un peu plus rapide que la création de chaque bit.
C'est en effet légèrement plus rapide, au moins aussi longtemps que le tableau d'octets est inférieure à 30 éléments (en fonction de votre optimisation des indicateurs transmis à compilateur). Ensemble plus grand que cela et le temps utilisé par le passage de la bitset, le réglage de chaque peu plus vite.
vous pouvez initialiser le bitset à partir d'un flux. Je ne me souviens pas comment régler un byte[] dans un cours d'eau, mais...
de http://www.sgi.com/tech/stl/bitset.html
Voici ma mise en œuvre à l'aide du modèle de méta-programmation.
Les boucles sont faites au moment de la compilation.
J'ai pris @strager version modifiée afin de préparer pour la TMP:
Version modifiée avec des boucles dans un moment de l'exécution:
TMP version basée sur elle:
code client: