Qt C ++ xor校验和?

时间:2016-12-01 07:41:48

标签: c++ qt checksum logical-operators xor

我试图找到一种通过具有n个十六进制值的char数组的方法,即 {0xA2,0xE7,0x5f,0x1B,0x11,0x11,0x00} 我想尝试通过其中的所有项目进行XOR校验和 - 更准确地说, A2 ^ E7 ^ 5F ^ 1B ^ 11 ^ 00 10

以下是我的代码:

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不会编译它并给我一个愚蠢的错误&#34; 2248:&#39; QByteArray :: operator QNoImplicitBoolCast&#39; :无法访问在课程中声明的私人成员&#39; QByteArray&#39;&#34;。

关于如何使其发挥作用的任何想法?

1 个答案:

答案 0 :(得分:2)

您使用b作为指针。

为了使用operator[](通常,所有operator XX和赋值运算符),您应该使用对象或对象的引用,而不是指针。

您应该将您的功能修改为:

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

你的电话应该是:

{
    QByteArray ba;

    //Fill ba.

    //Now you should not pass a pointer
    //checkSum(&ba) //This should be similar to your call.
    checkSum(ba);   //Now, there is no &.
}

注意:如果你想使用opeartor[]指针,你应该使用不同的sintax:

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