2016-10-16 3 views
2

J'ai une chaîne de 50 bits (dans un fichier txt externe) de 1s et 0s en C++ et j'ai besoin de l'utiliser dans systemC (pas de problème ici). Maintenant, le problème est: 50 bits de la chaîne doivent d'abord être convertis en nombre entier, puis convertir un entier en chaîne pour mon but. Mais quand je convertis la chaîne en nombre entier il ne reflète pas le résultat comme prévu.convertir une valeur binaire de 50 bits en entier

string a = "1000000001001000100000010100001001010100010000011"; 
long int value; 
value = atoi(a.c_str()); 
cout <<"converted value "<<value; 
+0

Avez-vous lu la page de manuel pour 'atoi'? –

Répondre

2

votre ami ici est strtoll

à savoir changer

value = atoi(a.c_str()); 

à

long long int value = strtoll(a.c_str(), NULL, 2); 
+0

sur la conversion de la chaîne mentionnée ci-dessus en utilisant la méthode que vous avez décrite j'obtiens un décimal (int) 2147483647 qui est beaucoup moins que la valeur de la chaîne. – anvinder

+0

J'attends le résultat après la conversion en tant que 282097789216899. – anvinder

+0

S'il vous plaît voir edit - 'long int' n'est pas assez long - [code] (http://ideone.com/5RuxsW) –

0

Depuis C++ 11, nous avons std::sto* fonctions:

long long value = std::stoll(a, nullptr, 2);