Ich versuche einen eingehenden Sting von 1s und 0s von stdin in ihre jeweiligen binären Werte zu konvertieren (wo eine Zeichenkette wie "11110111" in 0xF7 konvertiert würde). Dies scheint ziemlich trivial zu sein, aber ich möchte das Rad nicht neu erfinden, also frage ich mich, ob es irgendetwas in den C/C++ - Standardbibliotheken gibt, die eine solche Operation bereits ausführen können?Umwandlung von 1s und 0s in einen binären Wert
Antwort
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char * ptr;
long parsed = strtol("11110111", & ptr, 2);
printf("%lX\n", parsed);
return EXIT_SUCCESS;
}
verwenden, gibt als long long
Version, strtoll
.
Das sieht ungefähr richtig aus. Meine einzige Sorge war auf sehr große Saiten, die, wenn ich jetzt darüber nachdenke, wahrscheinlich sowieso irgendeinen benutzerdefinierten Code benötigen würden. – grosauro
Neben Strtol gibt es auch einen Spaziergang (zwei L) für "Long Long" ganze Zahlen. – jkramer
Ah, jetzt sehe ich deinen Standpunkt. Die Länge der Zeichenfolge sollte kein Problem sein, solange die resultierende Zahl in die lange oder lange lange Ganzzahl passt. – jkramer
können Sie strtol Für größere Zahlen
char string[] = "1101110100110100100000";
char * end;
long int value = strtol (string,&end,2);
Sie können std :: bitset verwenden (wenn dann die Länge Ihrer Bits zur Kompilierzeit bekannt ist)
Obwohl mit einem Programm könnten Sie es in Stücke aufteilen und kombinieren.
#include <bitset>
#include <iostream>
int main()
{
std::bitset<5> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
}
können Sie dynamische Bitset boost:
boost::dynamic_bitset<> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
Keine Hausaufgaben. Ich versuche, einen Konverter einzubetten, um einfacher in eine Reihe von Debugging-Tools zu lesen, aber alle unsere Eingaben kommen im String-Format durch. – grosauro