void processBuffer() {
const int FRAME_HEAD_SIZE = 8;
const int FUNC_CODE_OFFSET = 0;
const int DATA_LENGTH_OFFSET = 4;
while (buffer.size() >= FRAME_HEAD_SIZE) {
int funcCode = *reinterpret_cast<const int*>(buffer.constData() + FUNC_CODE_OFFSET);
int dataLength = *reinterpret_cast<const int*>(buffer.constData() + DATA_LENGTH_OFFSET);
int frameSize = FRAME_HEAD_SIZE + dataLength;
if (buffer.size() >= frameSize) {
QByteArray dataFrame = buffer.mid(FRAME_HEAD_SIZE, dataLength);
QByteArray frameHeader = buffer.left(FRAME_HEAD_SIZE);
if (funcCode == expectedFuncCode && otherConditions()) {
processData(funcCode, frameHeader, dataFrame);
} else {
}
buffer = buffer.mid(frameSize);
} else {
break;
}
}
}
QByteArray buffer;
void processBuffer() {
const char START_BYTE = 0x01;
const char END_BYTE = 0x04;
int startIndex = buffer.indexOf(START_BYTE);
int endIndex = buffer.indexOf(END_BYTE, startIndex);
while (startIndex != -1 && endIndex != -1) {
if (endIndex > startIndex) {
QByteArray dataFrame = buffer.mid(startIndex, endIndex - startIndex + 1);
processData(dataFrame);
buffer = buffer.mid(endIndex + 1);
}
startIndex = buffer.indexOf(START_BYTE);
endIndex = buffer.indexOf(END_BYTE, startIndex);
}
}