Qt C++ xor 用于校验和?

Qt C++ xor for a checksum?

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

这是我的代码:

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::operator QNoImplicitBoolCast':无法访问在 class [=28 中声明的私有成员=]”。

关于如何让它发挥作用有什么想法吗?

您正在使用 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[],你应该使用不同的语法:

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