2017-10-18 14 views
-1

Je fais une fonction pour convertir un entier en un caractère hexadécimal * dans Arduino, mais je suis tombé sur le problème de ne pas pouvoir convertir une chaîne en un caractère *. Peut-être que s'il y a un moyen d'allouer dynamiquement de la mémoire pour char *, je n'ai pas besoin d'une classe String.Comment convertir une chaîne en un caractère * dans 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; 
} 

La fonction toCharArray() ne convertit pas la chaîne à un tableau de caractères. Serial.print (c) renvoie l'impression vide. Je ne sais pas ce que je peux faire.

+0

my_string.c_str() fonctionne pas dans Arduino IDE –

+1

Astuce: Quel est le valeur de 'y, z' la première fois' int y; int z; while (x> 16 || y * 16 == z) 'est-il exécuté? – chux

+0

my_string.data() ou & my_string [0] qui obtiendra le pointeur vers le tableau de caractères interne. –

Répondre

3

Mise à jour: Votre question re: String -> char* conversion:

String.toCharArray(char* buffer, int length) veut un tampon de tableau de caractères et la taille de la mémoire tampon.

Plus précisément - vos problèmes ici sont les suivantes:

  1. char* c est un pointeur qui est jamais été initialisé.
  2. length est censé être la taille du tampon. La chaîne sait combien de temps il est.

Ainsi, une meilleure façon d'exécuter ce serait:

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

Sinon, vous pouvez initialiser c avec malloc, mais vous auriez à free plus tard. L'utilisation de la pile pour des choses comme celle-ci vous fait gagner du temps et simplifie les choses.

Référence: https://www.arduino.cc/en/Reference/StringToCharArray


L'objectif dans votre code:

Ceci est essentiellement une question double de: https://stackoverflow.com/a/5703349/1068537

réponse liée de Voir Nathan:

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

À moins que ce code ne soit nécessaire à des fins académiques, vous devez utiliser les mécanismes fournis par les bibliothèques standard et ne pas réinventer la roue.

  • String(int, HEX) retourne la valeur hexadécimale de l'entier que vous cherchez à convertir
  • Serial.print accepte String comme argument
+0

Mon Dieu! Je sais comment convertir int en hexadécimal, le problème n'est pas cela. Je veux convertir une chaîne dans un char *. –

+0

Mon code est exactement à des fins académiques. –