Я работаю над программированием устройства с использованием Qt C ++ 5.3.2.Есть странное поведение, которое я не могу понять.
QByteArray file_data;
if (!file.atEnd()) {
file_data = file.readAll();
}
int i = 0, j = 0;
int index = 0;
QByteArray DataBuf;
j = 76;
while (true)
{
DataBuf[0] = (j + 3);
DataBuf[1] = 0x24;
DataBuf[2] = 0x24;
for (i = 0; i < j; ++i)
{
DataBuf[i + 3] = file_data[i + index];
DataBuf[1] = DataBuf[1] + file_data[i + index]; //Doubt here
}
response.clear();
serialPort->write(DataBuf, DataBuf[0]);
for (int i=0;i<6;i++) {
if (serialPort->readBufferSize()>=2) {
break;
}
wait(1); //user defined function, is same as msleep(5)
}
qa = response.toLocal8Bit();
if (qa.toHex() != "00cc") return;
index += 76;
if (j == len) break;
if (len > 76) len -= 76;
if (len <= 76) j = len;
}
Это часть кода, над которой я работаю.Строка, упоминаемая как «Сомнение здесь», не работает, как ожидалось.Когда я запускаю эту программу, значение в Databuf [1] не соответствует сумме всех 76 байтов данных.Данные, записанные в Databuf [2] в Databuf [78], полностью верны, но сложение - нет.Но когда я меняю строку с DataBuf [1] = DataBuf [1] + file_data [i + index];в DataBuf [1] = DataBuf [1] + DataBuf [i + 3];это работает правильно.
Что здесь происходит?Может кто-нибудь помочь, пожалуйста.