c++ - Qt C++ xor 用于校验和?

标签 c++ qt checksum logical-operators xor

我正在尝试找到一种方法来遍历具有 n 个十六进制值的字符数组,即 {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’:无法访问类‘QByteArray’中声明的私有(private)成员”。

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

最佳答案

您正在使用 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);
}

关于c++ - Qt C++ xor 用于校验和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40905092/

相关文章:

bash - ubuntu中的校验和bash脚本

C++ throw() 优化

c++ - 为什么指向释放内存的引用有效?

c++ - 添加多个 qslider 和 qspinner

javascript - QML - 动态创建ListModel(JAVASCRIPT问题)

FTP:复制、检查完整性和删除

Windows 等效于 linux cksum 命令

c++ - 错误使用条件变量

c++ - 如果在堆上定义,QProcess不会终止/终止进程

c++ - 两个对象 QT 之间的示例 SLOT/SIGNAL