Hallo Zusammen,
ich sende ein IR-Signal wie folgt:
irsend.sendNEC(0x20DF10EF,32);
Möchte nun den Code "0x20DF10EF" als Variable einsetzen und verwende dafür einen "unsigned long int". Durch andere Begebenheiten habe ich den veränderlichen Code "20DF10EF" als String gespeichert. Diesen Umstand jetzt zu ändern würde bedeuten, alles ändern zu müssen und das möchte ich umgehen. Meine Frage... Wie setze ich das "0x" und das "20DF10EF" zusammen und konvertiere es ohne Fehler in den besagten Integer?
Liebe Grüße,
Max
strtoul() (string to unsigned long)
http://www.cplusplus.com/reference/cstdlib/strtoul/
Mit 16 für den Basis-Parameter. 0 würde auch gehen wenn immer 0x davor steht. Das kannst du dir aber sparen, da du sowieso weißt dass es Hex ist. Bei Integer-Literalen braucht man dass nur damit das der Compiler als Hex interpretiert. Aber mit base = 16 interpretiert das die Funktion als Hex egal was davor steht.
Nicht dass du ein Arduino String Objekt verwendest!
Sereniflys Tip bezieht sich auf char* oder char Arrays.
char text[] = "20DF10EF";
unsigned long code = strtoul(text, NULL, 16);
Serial.println(code, HEX); // sollte wieder 20DF10EF aussgeben.
irsend.sendNEC(code,32);
Bei String Objekten kann man inzwischen einfach c_str() machen um direkt an das interne Array zu kommen
String text = "20DF10EF";
unsigned long code = strtoul(text.c_str(), NULL, 16);
Wenn möglich sollte man aber direkt char Arrays verwenden