2016-12-01 60 views
0

は、私は、16進数値IEのn個の量でchar配列を経由の道を見つけようとしています{0xA2、0xE7、0x5f、として0x1B、0x11を、0x11を、0x00の}と私はXORを試してみてやりたいですその中のすべての項目を通じたチェックサム - より正確にはA2^E7^5F^1B^11^00はです。ここでチェックサムのQt C++ xor?

は、私のコードのビットは次のとおりです。

void MainWindow::checkSum(QByteArray *b) 
{ 
    qint16 b_len = b->length(); 

    unsigned char xor = 0; 

    for (int i = 0 ; i < b_len ; i ++) 
    { 
     xor = xor^b[i]; 
    } 
} 

私は私のコードは、しかし、Qtはそれをコンパイルし、私に2248」の愚かなエラー与えていない仕事をやるべきだと思う。「QByteArray ::演算子をQNoImplicitBoolCast ':クラス' QByteArray 'で宣言されたプライベートメンバーにアクセスできません。

どのように動作させるためのアイデアですか?

+0

一般的に、iを明確に要求する状況を除いて、ポインタで物を渡すべきではありませんt。デフォルトでは、Qt型は、in-argumentsのときはconst参照で、out-argumentsのときは参照によって渡す必要があります。 'QObject'と派生クラスをポインタまたはポインタへのポインタで渡すのが普通です。 'QFlags'から派生した型のような小さな値型は、値渡しされるべきです。 –

+0

ここで結果を確認することができます:http://www.th-thielemann.de/tools/checksum.html –

答えて

2

ポインタとしてbを使用しています。

operator[](一般にはoperator XXと代入演算子すべて)を使用するには、ポインタではなくオブジェクトまたはオブジェクトへの参照を使用する必要があります。

あなたはにあなたの関数を変更する必要があります。

void MainWindow::checkSum(const QByteArray &b) 
{ 
    //Same code as yours 
} 

とあなたの呼び出しは次のようになります。

​​

注:ポインタをopeartor[]を使用したい場合、あなたは別のsintaxを使用する必要があります。

void MainWindow::checkSum(QByteArray *b) 
{ 
    //... 
    xor = xor^b->operator[](i); 
}