2016-09-06 14 views
0

私はint8_t変数を文字列に変換する必要があるプロジェクトに取り組んでいます。私はこれについて少し読んで、Strint(int8_t)を使用することがオプションであるという結論に達しました。私は動作しませんでした使用方法は、私はもう少し研究し、文字列(マット)を見つけたいくつかの理由intをC++で文字列に変換する

int8_t matt = 0; 
matt += 1; 
char string[3]=String(matt); 
tft.textWrite(string);// this is used to display text on an lcd display (arduino) 

実際にStringオブジェクトです:

は、ここに私のコードです。私はこれが事実に当てはまるかどうか本当に分かりません。 tft.textWrite()のために。これは何かのように見えるはずです。

char string[15]= "Hello, World! "; 
tft.textWrite(string); 

私もこれを使用してみました:

char string[3]; 
sprintf(string, "%ld", matt); 

をしかし、これは動作しませんでした。ここ

コードがあります。

誰でも手伝いできますか?

ありがとうございます。

+2

があった私は見ていなかった、古き良きCスタイルに適用されますか? – George

+1

arduinoでそれを使うことはできません。 –

+0

'char string [3]'は 'char string [5]'にする必要があります。 '-100 '、すなわち4文字と終了を含む。また、「これはうまくいかない」とはどういう意味ですか?どちらの方法でそれは失敗しましたか? – 4386427

答えて

0

正常に動作するはずです。

sprintf(string, "%ld", matt); 

%ldはlong intに使用されます。あなたは-128〜+128の範囲のint8_tを使用していますが、%dを使用する方が良いでしょう。

-1

次のコードは動作するはずです:

// Example program 
#include <iostream> 
#include <string> 

int main() 
{ 
    int8_t matt = 0; 
    matt += 1; 
    char string[1]; 
    sprintf(string, "%ld", matt); 
    std::cout << string << std::endl; 
    return 0; 
} 

それは "1" を出力します。

+0

あなたは "arduino"タグを見ましたか?とりわけstd :: cout;)はありません – datafiddler

0

このコードは、8ビットのintを印刷できるものを見つける必要があるタイプとしてlong intを見込んでほぼ右

char string[3]; 
sprintf(string, "%ld", matt); 

最初

"%ld" 

です。私はその "%hh"だと思います。

秒あなた

char string[3]; 

は短すぎます! mattが100の場合、3文字を使用しますが、最後のゼロ(および符号)のための余裕が必要です。だから、それはあなたの元のコードと同じように、それは

snprintf(string, sizeof(string), "%ld", matt); 
+0

ランダマイズがintより小さいものはすべて可変長関数に渡されるとint型に昇格されるので、 '%d'フォーマット指定子を使う必要があります。 –

+0

@Revolver_Ocelot、それは少し簡素化するでしょう。 – Surt

0

を使用し、文字列の末尾を超えて書き込むことができますように、コード

sprintf(string, "%ld", matt); 

が安全ではない、少なくとも

char string[5]; 

第三べきですまず、CにはString型がなく、固定サイズのchar配列(type:char *またはchar [])のみがあることに注意してください。私たちはまだそれらを文字列と呼びますが、それを覚えておいてください。

あなたのsprintfでの試行はよかったです。あなたの環境に完全なC標準ライブラリが含まれているかどうかを確認していますか?そうでない場合は、独自のフォーマット機能をコーディングする必要があります。はいの場合は、string.hをインクルードしましたか?

とにかく、snprintf()を使ってターゲットのサイズを正確に調べようとすると、より安全です。

EDIT:この投稿は、オフトピックのstd :: to_stringに(0)と間違って何

+2

質問はC++ではなくCです。C++には文字列型があります。私たちは、文字配列で自分自身をもはやいじめません。 –

+0

あなたはXを信じていないと教えてください) –

+0

何が信じられませんでしたか? –

関連する問題