2016-06-22 4 views
1

T1P1(以下を参照)の正しいデータ型を理解しようとしています。const char *をバイナリ演算子に変換する+

コンパイラエラー:

weather_station_v1_2.ino:76:37: error: invalid operands of types ‘const char*’ and ‘const char [11]’ to binary ‘operator+’ 

コード:最後data

if (status != 0) { 
     delay(status); 
     status = pressure.getPressure(P,T); 

     const unsigned char P1 = pressure.getTemperature(P); 
     const unsigned char T1 = pressure.getTemperature(T); 

     byte data = "temp" + T1 + "&pressure=" + P1; 
     httppost(); 
     delay(1000); 
    } 

は、PHPサーバーに送信されますが、それはスキームname1=value1&name2=value2に従わなければなりません。

あなたはとても素敵で、私が間違っていることについてのヒントを教えてくれませんか? ありがとう

+1

あなたは 'snprintf()'を必要としていますか? –

+1

はい、それはそうですxD – hehxes

答えて

2

問題はデータ型変換の1つではありませんが、演算子+は算術演算(数値の追加またはポインタへのオフセットの追加)に対してのみ定義されています。

文字列を連結しようとしています。 Cには "string"型は組み込まれていません。C "strings"は文字配列で、通常は0バイトで終了します。 Cの配列は固定サイズであり、固定配列なので、配列 "連結"演算子はCにはありません。

配列やCの "文字列"の演算は、通常は操作関数によって実装されます。あなたの特定のケースでは、通常の方法はprintfファミリの文字列フォーマット関数の使用です。 snprintfをご覧ください。

+1

OPリクエストごとに良い "ヒント"答え。 UV(Quibble:通常は0バイトで終わる文字列とは反対です。)Cでは、_文字列は常にヌル文字で終わり、それ以外の場合は文字列ではありません。 – chux

+0

助けていただきありがとうございます。 :) 'なら{ 遅延(ステータス)(ステータス= 0!); ステータス= pressure.getPressure(P、T); のconst unsigned char型のP1 = pressure.getTemperature(P); CONST unsigned char型のT1 = pressure.getTemperature(T); チャーバッファー[100]; httppost();(バッファ、100、 "TEMP =%のT1&圧力=%のP1"、T1、P1)= snprintfの バイトデータ 遅延(1,000 ); } ' – hehxes

+0

@hehxes' "temp =%T1 &pressure =%P1 "は珍しいフォーマットです。確かにそれは動作しますか? – chux

関連する問題