2017-10-18 11 views
-1

私はArduinoで整数を16進数のchar *に変換する関数を実行していますが、文字列をchar *に変換できないという問題に直面しました。多分、char *のために動的にメモリを割り当てる方法があれば、私はクラスStringを必要としません。Arduinoで文字列をchar *に変換するには?

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

toCharArray()関数は文字列をchar配列に変換していません。 Serial.print(c)は空の印刷を返します。私は何ができるのか分からない。更新

+0

my_string.c_str()ArduinoのIDEで –

+1

ヒント機能しないようStringを受け入れる:何ですが'y、z'の最初の値' int y; int z; while(x> 16 || y * 16 == z) 'が実行されるのは、 ですか? – chux

+0

my_string.data()または&my_string [0]これは、内部char配列へのポインタを取得します。 –

答えて

3

:あなたの質問の再:String -> char*変換:

String.toCharArray(char* buffer, int length)は、文字配列バッファとバッファのサイズを望んでいます。

  1. char* cが初期化されることはありませんポインタである: -

    は、具体的にここにあなたの問題があることです。

  2. lengthは、バッファのサイズとする。文字列はどれくらいの長さかを知っています。だから、

、これを実行するためのより良い方法は、次のようになります。

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

、あなたはmalloccを初期化することもできますが、あなたは後でそれをfreeする必要があると思います。このようなものにスタックを使用すると、時間が節約され、物事が簡単に保たれます。

参考:https://www.arduino.cc/en/Reference/StringToCharArray


あなたのコード内の意図:https://stackoverflow.com/a/5703349/1068537

参照ネイサンのリンクの答え:

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

これは、基本的に重複して質問です

このコードが学術的な目的で必要とされない限り、標準ライブラリによって提供されているメカニズムを使用して、ホイールを再構成する必要はありません。

  • String(int, HEX)あなたは
  • Serial.printを変換するために探している整数の進値を返す引数
+0

私の神! intを16進数に変換する方法は分かっていますが、問題はそれではありません。私はchar *で文字列を変換したい。 –

+0

私のコードは、学術目的のためのものです。 –

関連する問題