2016-07-28 6 views
-2

私は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進データを書き込むための簡単な方法はありますか?

+0

mytestUCがすでにバイト配列であることを知りませんか? – deviantfan

+0

...その0x31は '1'ですか? – deviantfan

+0

いいえ、以前は分かりません。シリアル - >書き込みでmytestUCを使用しようとしましたが、動作しません。なぜなら、 "書き込み"にはconst charが必要で、unsigned charが必要なのです。いくつかの16進データは0x7Fのように大きくなります。 Jap 0x31は1ですが、16進数で送信する必要があります。 – knowless

答えて

0

あなたがQByteArrayを印刷すると、すべての文字をASCIIに変換しようとしますが、数値は0x31です。シリアルポートのデータはバイナリで送信されるため、文字 '1'は0x31として送信されます。出力がされます

QByteArray ba; 
ba.append((char) 0x31); 
ba.append((char) 0x32); 
ba.append((char) 0x33); 
ba.append((char) 0x34); 

qDebug() << "char: " << ba; 
qDebug() << "hexa: " << ba.toHex(); 

:QByteArrayからヘキサ内のデータを参照するには、機能toHex()、例を使用することができます

char: "1234" 
hexa: "31323334" 

QSerialPortクラス内の関数qint64 QIODevice::write(const QByteArray &byteArray)があります。

+0

Thx !!! .toHex()はうまく動作します。 – knowless

関連する問題