2016-12-01 526 views
0

我试图找到通过字符数组要与十六进制值,即n个量的方式{0xA2,0xE7,0x5F的,0x1B,0×11,0×11,0×00},我想尝试做一个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

一般情况下,你不应该路过指针的东西,除非明确要求我的情况吨。默认情况下,当它们在参数中时,你应该通过const引用来传递Qt类型,当它们是out-arguments时通过引用来传递Qt类型。传统上,通过指针或指向const的'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); 
}