C++ QByteArray的问题::对
我对QByteArray的正确函数有问题。我不知道我做错了什么。我不明白为什么输出是这样的。在我看来,在第一个输出示例中,xxxx和------之间的行应该是4080-1897,所以是2183。 有人能告诉我怎么了吗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 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);