String to Byte

Hallo zusammen,

ich habe einen String in folgender Form → 111100111

Aus diesem String will ich eine int Variable erzeugen → 0b11100111

Diesen Ansatz hab ich bis jetzt:

String inputString = ‘10101010’;
unsigned long var = 0;
unsigned long myByte = 1UL;

while(var < inputString.length() -1){

char nextChar = inputString.charAt(var);

if(nextChar == ‘1’) {
Serial.println(“1”);
myByte = myByte << 1;
} else {
Serial.println(“0”);
myByte = myByte << 0;
}
Serial.print(“myByte”);
Serial.println(myByte);

var++;
}

Die Ausgabe ist dann wie folgt:

1
myByte2
0
myByte2
1
myByte4
0
myByte4
1
myByte8
0
myByte8
1
myByte16
0
myByte16

Irgendwie verstehe ich das Schieben nicht so richtig :confused:
Kann mir da einer helfen? :slight_smile:

Wieso Byte? Du willst einen int.

Dein String ist ja nicht mal richtig deklariert:

String inputString = '10101010';

' ' ist nicht das gleiche wie " ". Schon in der ersten Zeile ein Fehler. Dann kann das nie was werden

Das geht ganz einfach mit einer fertigen Funktion:

void setup() 
{
  Serial.begin(9600);
  
  String inputString = "10101010";

  unsigned int value = strtoul(inputString.c_str(), NULL, 2);
  Serial.println(value);

}

void loop() 
{
}

strtoul = string to unsigned long

Am besten die String Klasse ganz weglassen. Die ist überflüssig:

void setup() 
{
  Serial.begin(9600);
  
  char inputString[] = "10101010";

  unsigned int value = strtoul(inputString, NULL, 2);
  Serial.println(value);
}

Und strtoul() kann auch andere Zahlen-System wie Hexadezimal verarbeiten. Oder diese sogar mit 0x oder 0b unterscheiden wenn man 0 als 3. Parameter übergibt

Aus diesem String will ich eine int Variable erzeugen → 0b11100111

Dafür gibt es strtol

char inputstring[] = "111100111"; //

int result = strtol(inputstring, NULL, 2); 

Serial.println(result); //   487
Serial.println(result,2); //  111100111

Zu deinem “Ansatz” :

String inputString = ‘10101010’; // du meinst sicher " " statt ’ ’

myByte = myByte << 0; // macht garnichts

Die Anzeige macht genau was du programmiert hast, was ist dein Problem ?
Und was hat es mit deiner Aufgabenstellung zu tun?

Du kannst natürlich den String auch leicht “von Hand” auswerten:

char inputstring[] = "10101010";
char* cp = inputstring;
int result=0;
while (*cp != 0) {
   result = result << 1;
   if (*cp == '1') result +=1;
   cp++;
}
Serial.println(result);   //  170
Serial.println(result,2); // 10101010

Keine Fehlerabprüfung, keine Leerzeichen erlaubt

Serenifly war schneller und hat komplett recht. Da die Antworten sich geringfügig ergänzen, lass ich meine auch mal drin.

Danke Leute!

Die Funktion hat mir gefehlt - funktioniert wunderbar!

Zu den '' statt der "": Der inputString wird in einer App erzeugt und dann via REST an den Arduino geschickt. Deshalb hab ich den inputString nachträglich hier im Forum dazugeschrieben - passiert :wink:

Und danke Michael für den Code, wie ich einen String durchlaufen kann!

Da Du dann wahrscheinlich in der Folfe mit noch mehr Zeichenketten zu tun haben wirst, schau Dir mal diese Zusammenfassung über Zeichenketten an.

Gruß Tommy