Conversion de chaîne de 1 et de 0 en valeur binaire
Question
J'essaie de convertir une séquence entrante de 1 et de 0 de stdin en leurs valeurs binaires respectives (où une chaîne telle que "11110111" serait convertie en 0xF7). Cela semble assez trivial mais je ne veux pas réinventer la roue, donc je me demande s’il existe quelque chose dans la bibliothèque standard C / C ++ qui puisse déjà effectuer une telle opération?
La solution
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char * ptr;
long parsed = strtol("11110111", & ptr, 2);
printf("%lX\n", parsed);
return EXIT_SUCCESS;
}
Pour les grands nombres, il existe une version longue longue
, strtoll
.
Autres conseils
Vous pouvez utiliser std :: bitset (si la longueur de vos bits est connue au moment de la compilation)
Cependant, avec certains programmes, vous pouvez les diviser en morceaux et les combiner.
#include <bitset>
#include <iostream>
int main()
{
std::bitset<5> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
}
Vous pouvez utiliser strtol
char string[] = "1101110100110100100000";
char * end;
long int value = strtol (string,&end,2);
Vous pouvez utiliser Boost Dynamic Bitset:
boost::dynamic_bitset<> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
J'ai écrit quelques fonctions à ce sujet et obtenu une licence sous LGPL. Peut être trouvé ici .