C++ QByteArray的问题::对

C++ QByteArray的问题::对,c++,arrays,qt,byte,C++,Arrays,Qt,Byte,我对QByteArray的正确函数有问题。我不知道我做错了什么。我不明白为什么输出是这样的。在我看来,在第一个输出示例中,xxxx和------之间的行应该是4080-1897,所以是2183。 有人能告诉我怎么了吗 QByteArray serialByteBuffer; //serialByteBuffer is already filled unsigned char start_stop = 0xFE; //-------------------------------

我对QByteArray的正确函数有问题。我不知道我做错了什么。我不明白为什么输出是这样的。在我看来,在第一个输出示例中,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();
}


或者…

如果我们看一下有关的文档

此函数将长度作为参数,以便:

返回一个字节数组,其中包含此字节数组最右边的len字节

因此,当你写作时:

然后,
z
的值为
y.size()
。你得到了你所写的预期结果

如果
z
超过文档中提到的
serialByteBuffer
字节数组的大小,则
z
y.size()
可能不同:

如果len大于size(),则返回整个字节数组


我认为数组的右侧应该是8160-1897长。所以y.size()不应该与z相同。如果我用左而不是右,z和y也是一样的。@MB1995不,你不明白。请看文档示例
x.right(5)
的意思是“返回
x
的最后5个字节”,从“菠萝”(大小9)中得到“苹果”(大小5)。您可以很容易地看到,大小肯定不是
9-5
,而是
5
right()
不会移除右侧部件,但会返回右侧部件。恐怕你误解了这个函数的用法:)谢谢你详细的回答。现在我明白了。谢谢:)
xxxxxxxxxxxx
8160
+++++++++++++
2111
xxxxxxxxxxxxx+
2111
---------------
xxxxxxxxxxxx
4080
+++++++++++++
1897
xxxxxxxxxxxxx+
1897
---------------
QByteArray y = serialByteBuffer.right(z);