シリアルポートCOM経由でQt
とμCの間でデータを送信したいとします。シリアルポート書き込み: 'int'から 'const char *'への無効な変換
私は、charを送信しようとしていますが、私はserial->write(250)
を使用する場合、私はこのエラーを取得する:
invalid conversion from 'int' to 'const char*
しかし、私はserial->write("A")
をすれば、それが動作します。理由は何ですか?
シリアルポートCOM経由でQt
とμCの間でデータを送信したいとします。シリアルポート書き込み: 'int'から 'const char *'への無効な変換
私は、charを送信しようとしていますが、私はserial->write(250)
を使用する場合、私はこのエラーを取得する:
invalid conversion from 'int' to 'const char*
しかし、私はserial->write("A")
をすれば、それが動作します。理由は何ですか?
250は、タイプint
のようにコンパイラによって解釈され、serial->write()
関数は入力としてconst char *
を必要とします。 あなたはcharとして250
を送信する場合は、あなたがタイプに変換する必要があります。
char cValue = 250;
char *pCValue = &cValue;
serial->write(pCValue);
をしかし、pCValue
は一時的な文字へのポインタであり、cがスコープ内にある間だけ有効となりますのでご了承ください。 owacoderによって指摘されているように、シリアルクラスでデータサイズを指定できない場合は、配列の最後にヌルターミネータを追加する必要もあります。書き込みデータのためのQSerialPortで利用できる
メンバーが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);
コードを表示できますか? [最小限の、完全で検証可能な例](http://www.stackoverflow.com/help/mcve)を投稿してください。 – owacoder
「250を書く」と言ったら、どういう意味ですか?文字列 '' 250 ''または文字列' "\ xFA" 'を値250の1バイトで構成したいのですか? –
いいえ250桁の10進数で0xFAを送りたい – Ale