私はQT Creator(MinGW 5.3.0 C++、Windows)を使用しており、シリアル接続の16進データを書きたいと思っています。 方法が見つかりましたが、何か問題があります。彼が変換した1つの16進データだけが間違っています。16進データでcharをttearrayに変換0x31
私のコードが理解してくれることを願っています。
static const unsigned char mytestUC[] = {0x04,0x31,0xD2,0x01, 0xA1};
enum { NBYTES = sizeof(mytestUC) };
const char *mytest = reinterpret_cast<const char*>(mytestUC);
QByteArray testdata = QByteArray::fromRawData(mytest, sizeof(mytest)+1);
qDebug()<<"testdata "<<testdata;
私は出力がされるべきだと思うでしょう: テストデータ "\ X04 31 \ XD2 \ X01 \ XA1 \"
しかし、本当で、それは次のようになります。 テストデータ "\ X04" "1 \ xD2 \ x01 \ xA1 "
QBytearrayに直接追加して自分の16進数のデータを書き込もうとしました。
testdata .append((char) 0x04);
testdata .append((char) 0x31);
testdata .append((char) 0xD2);
testdata .append((char) 0x01);
testdata .append((char) 0xA1);
なぜプログラムは0x31のみを間違った方法で変換しますか?どのように改善できますか? QBytearrayに16進データを書き込むための簡単な方法はありますか?
mytestUCがすでにバイト配列であることを知りませんか? – deviantfan
...その0x31は '1'ですか? – deviantfan
いいえ、以前は分かりません。シリアル - >書き込みでmytestUCを使用しようとしましたが、動作しません。なぜなら、 "書き込み"にはconst charが必要で、unsigned charが必要なのです。いくつかの16進データは0x7Fのように大きくなります。 Jap 0x31は1ですが、16進数で送信する必要があります。 – knowless