Konvertieren Sie einen Bitstring in einen ganzzahligen Wert

7

Ich habe einen String mit 0 und 1 gefüllt und möchte eine Ganzzahl daraus machen:

String bitString = ""; 
int Number;
int tmp;

bitString = "";
  for (i=1;i<=10;i++)
  {
    tmp= analogRead (A0);
    bitString +=  tmp % 2;
    delay(50);
  }
// now bitString contains for example "10100110" 
// Number = bitstring to int <-------------
// In the end I want that the variable Number contains the integer 166
kimliv
quelle
Was ist die Frage? Was erwarten Sie von diesem Code und was macht er? Was hast du noch versucht?
Craig
@Craig Ich habe die Frage bearbeitet. Wenn der bitString beispielsweise eine "10100110" enthält, soll das Programm diese als Dezimalzahl 166 in der Variablen int speichern.
Kimliv
Benötigen Sie die Schnur? Sie können die Ganzzahldarstellung direkt erstellen.
Craig
@Craig Ich möchte auch die Bitstring ausdrucken
Kimliv

Antworten:

6

Wenn Sie nur die Zeichenfolge zum Drucken benötigen, können Sie den Wert in einer Ganzzahl speichern und dann die Funktion Serial.print (Nummer, BIN) verwenden, um die Ausgabe als Binärwert zu formatieren. Das Anhängen von Ganzzahlen an Zeichenfolgen ist sowohl hinsichtlich der Leistung als auch der Speichernutzung ein potenziell kostspieliger Vorgang.

int Number = 0;
int tmp;

for (int i=9;i>=0;i--) {
  tmp = analogRead (A0);
  Number += (tmp % 2) << i;
  delay(50);
}
Serial.print(Number, BIN);
Craig
quelle
Ja, Ihre Lösung sieht effizienter aus! und macht die Arbeit
Kimliv
4

Auschecken strtoul()

Es sollte ungefähr so ​​funktionieren:

unsigned long result = strtoul(bitstring.c_str(), NULL, 2);

Jetzt haben Sie eine lange Variable, die bei Bedarf in ein int konvertiert werden kann.

Doowybbob
quelle
@kimliv Hast du .c_str () am Ende der Bitstring hinzugefügt, wie Peter oben betont hat? c_str () sollte ein const char * zurückgeben.
Doowybbob
es funktioniert so!
Kimliv