2016-04-06 29 views
0

シリアルポートCOM経由でQtとμCの間でデータを送信したいとします。シリアルポート書き込み: 'int'から 'const char *'への無効な変換

私は、charを送信しようとしていますが、私はserial->write(250)を使用する場合、私はこのエラーを取得する:

invalid conversion from 'int' to 'const char*

しかし、私はserial->write("A")をすれば、それが動作します。理由は何ですか?

+0

コードを表示できますか? [最小限の、完全で検証可能な例](http://www.stackoverflow.com/help/mcve)を投稿してください。 – owacoder

+0

「250を書く」と言ったら、どういう意味ですか?文字列 '' 250 ''または文字列' "\ xFA" 'を値250の1バイトで構成したいのですか? –

+0

いいえ250桁の10進数で0xFAを送りたい – Ale

答えて

0

250は、タイプintのようにコンパイラによって解釈され、serial->write()関数は入力としてconst char *を必要とします。 あなたはcharとして250を送信する場合は、あなたがタイプに変換する必要があります。

char cValue = 250; 
char *pCValue = &cValue; 
serial->write(pCValue); 

をしかし、pCValueは一時的な文字へのポインタであり、cがスコープ内にある間だけ有効となりますのでご了承ください。 owacoderによって指摘されているように、シリアルクラスでデータサイズを指定できない場合は、配列の最後にヌルターミネータを追加する必要もあります。書き込みデータのためのQSerialPortで利用できる

+0

ありがとうございますが、送信する価値があるのであれば迷惑でしょうか? キャストは使用できませんか? – Ale

+0

char値[] = {150,200,100,100,100}(または、好ましくはstd :: arrayを使用)またはstd :: vector の5つの値を持つchar配列を作成します。 (関数)を関数に渡す) –

+0

私はそうしてくれてありがとうございます シリアル→書き込み(値); 値[3]を選択するにはどうすればよいですか? – Ale

0

メンバーがdocsからこのです:あなたはserial->write(250)を使用している場合

write(const char *, qint64) : qint64 
write(const char *) : qint64 
write(const QByteArray &) : qint64 
writeData(const char *, qint64) : qint64 
writeData(const char *, qint64) : qint64 

は、コンパイルはintに番号をキャストして、int型を管理するためのメンバーがthrereではありません。代わりにserial->write("A")を使用する場合、「A」はchar *にキャストできます。

のために使用できるバイトをたくさん送ってQByteArray:

QByteArray cmd; 
cmd.append('A'); 
cmd.append('B'); 
cmd.append('C'); 
serial -> write (cmd); 

この方法で、すべての文字を送信し、QByteArrayにオブジェクトを変換できる便利なQtのクラスがたくさんあります。たとえば、QStringはQByteArrayに変換するだけです。

QString str = "ABC"; 
QByteArray cmd = str.toLatin1(); 
serial -> write (cmd); 
関連する問題