Проблемы с QByteArray :: right - PullRequest
       11

Проблемы с QByteArray :: right

0 голосов
/ 20 сентября 2019

У меня проблема с правильной функцией QByteArray.Я не знаю, что я делаю, wronge.Я не понимаю, почему вывод такой, какой он есть.На мой взгляд, в первом примере вывода строка между xxxx и ----- должна быть 4080-1897, а значит 2183. Может кто-нибудь сказать мне, что не так?

    QByteArray serialByteBuffer; //serialByteBuffer is already filled
    unsigned char start_stop = 0xFE;

// ------------------------------------------------------------------------

    if(serialByteBuffer.count(start_stop)==2){

    qDebug()<< "xxxxxxxxxxxx";
    qDebug()<< serialByteBuffer.size();
    qDebug()<< "+++++++++++++";
    int z = serialByteBuffer.indexOf(start_stop);
    qDebug()<< z;
    qDebug()<< "xxxxxxxxxxxxx+";
    QByteArray y = serialByteBuffer.right(z);
    qDebug() << y.size();
    qDebug()<< "---------------";


    serialByteBuffer.clear();
}

Вывод:

xxxxxxxxxxxx
8160
+++++++++++++
2111
xxxxxxxxxxxxx+
2111
---------------

или

xxxxxxxxxxxx
4080
+++++++++++++
1897
xxxxxxxxxxxxx+
1897
---------------

или ...

1 Ответ

1 голос
/ 20 сентября 2019

Если мы посмотрим на документацию о QByteArray::right().

Эта функция принимает длину в качестве параметра, так что:

Возвращает байтмассив, который содержит крайние правые байты этого байтового массива.

Следовательно, когда вы пишете:

QByteArray y = serialByteBuffer.right(z);

Затем (значение) z - это y.size().Вы получили ожидаемые результаты того, что написали.

z и y.size() могут отличаться, если z превышает размер массива байтов serialByteBuffer, как указано в документации:

Весь байтовый массив возвращается, если len больше чем size ().

...