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

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);

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.


@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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.