2017-10-18 6 views
-1

Ich mache eine Funktion, um eine ganze Zahl in ein hexadezimales Zeichen * in Arduino zu konvertieren, aber ich stieß auf das Problem, nicht in der Lage zu sein, einen String in ein char * zu konvertieren. Vielleicht, wenn es eine Möglichkeit gibt, Speicher dynamisch für char * zuzuweisen, brauche ich keine Klasse String.Wie konvertiert man einen String in Char * in Arduino?

char *ToCharHEX(int x) 
{ 
    String s; 
    int y = 0; 
    int z = 1; 
    do 
    { 

     if (x > 16) 
     { 
      y = (x - (x % 16))/16; 
      z = (x - (x % 16)); 
      x = x - (x - (x % 16)); 
     } 
     else 
     { 
      y = x; 
     } 
     switch (y) 
     { 
     case 0: 
      s += "0"; 
      continue; 
     case 1: 
      s += "1"; 
      continue; 
     case 2: 
      s += "2"; 
      continue; 
     case 3: 
      s += "3"; 
      continue; 
     case 4: 
      s += "4"; 
      continue; 
     case 5: 
      s += "5"; 
      continue; 
     case 6: 
      s += "6"; 
      continue; 
     case 7: 
      s += "7"; 
      continue; 
     case 8: 
      s += "8"; 
      continue; 
     case 9: 
      s += "9"; 
      continue; 
     case 10: 
      s += "A"; 
      continue; 
     case 11: 
      s += "B"; 
      continue; 
     case 12: 
      s += "C"; 
      continue; 
     case 13: 
      s += "D"; 
      continue; 
     case 14: 
      s += "E"; 
      continue; 
     case 15: 
      s += "F"; 
      continue; 
     } 
    }while (x > 16 || y * 16 == z); 
    char *c; 
    s.toCharArray(c, s.length()); 
    Serial.print(c); 
    return c; 
} 

Die toCharArray() - Funktion konvertiert die Zeichenfolge nicht in ein Char-Array. Serial.print (c) gibt leeres Drucken zurück. Ich weiß nicht, was ich tun kann.

+0

my_string.c_str() nicht –

+1

Hint in Arduino IDE arbeiten: Was ist die Wert von 'y, z' das erste Mal' int y; int z; while (x> 16 || y * 16 == z) 'wird ausgeführt? – chux

+0

my_string.data() oder & my_string [0], die den Zeiger auf das interne char-Array erhalten. –

Antwort

3

Aktualisiert: Ihre Frage re: String -> char* Umwandlung:

String.toCharArray(char* buffer, int length) ein Zeichen-Array-Puffer will und die Größe des Puffers.

Speziell - Ihre Probleme hier sind, dass:

  1. char* c ein Zeiger ist, die nie initialisiert wird.
  2. length soll die Größe des Puffers sein. Die Zeichenfolge weiß, wie lange es ist.

Also, einen besseren Weg zu führen dies wäre:

char c[20]; 
s.toCharArray(c, sizeof(c)); 

Alternativ Sie c mit malloc initialisieren konnte, aber dann würden Sie es free später haben. Die Verwendung des Stapels für solche Dinge spart Ihnen Zeit und hält die Dinge einfach.

Referenz: https://www.arduino.cc/en/Reference/StringToCharArray


Die Absicht in Ihrem Code:

Dies ist im Grunde eine doppelte Frage: https://stackoverflow.com/a/5703349/1068537

Siehe Nathans verknüpft Antwort:

// using an int and a base (hexadecimal): 
stringOne = String(45, HEX); 
// prints "2d", which is the hexadecimal version of decimal 45: 
Serial.println(stringOne); 

Wenn dieser Code nicht für akademische Zwecke benötigt wird, sollten Sie die von den Standardbibliotheken bereitgestellten Mechanismen verwenden und das Rad nicht neu erfinden.

  • String(int, HEX) kehrt der Hex-Wert der ganzen Zahl zu konvertierende gesuchten
  • Serial.print akzeptiert String als Argument
+0

Mein Gott! Ich weiß, wie man int in Hexadezimal konvertiert, das Problem ist nicht das. Ich möchte einen String in ein Char * umwandeln. –

+0

Mein Code ist genau für akademische Zwecke. –

Verwandte Themen