首页| 论坛| 消息

标题:QByteArray的constData遍历问题
作者:spygg
日期:2018-12-01 22:42
内容:

在遍历QByteArray的constData()时遇到问题,希望大神可以帮忙解惑,一种方法是每一次都取constData(),另一种方法是在循环开始前获取constData()后面每次只是移动指针(该方法会给出异常结果),代码如下:
第一种方法:
QByteArray peerAddrs = peers.toByteArray();
for(int i = 0; i < peerAddrs.size(); i += 6)
{
//每次都获取指针
uchar *p = (uchar*)peerAddrs.constData() + i;
//大端字节序
quint32 uiIp = qFromBigEndian(p);
quint16 uiPort = qFromBigEndian(p + 4);
m_listPeers.append(tmpAddr);
}
第二种方法(结果错误)
QByteArray peerAddrs = peers.toByteArray();
//第一次获取
uchar *p = (uchar*)peerAddrs.constData();
for(int i = 0; i < peerAddrs.size(); i += 6)
{
//移动指针
p += i;
//大端字节序
PEER_ADDR tmpAddr;
quint32 uiIp = qFromBigEndian(p);
quint16 uiPort = qFromBigEndian(p + 4);
m_listPeers.append(tmpAddr);
}
那啥,提供下QByteArray的内容
"d8:completei1945e10:incompletei58e8:intervali1800e5:peers198:\\uk\xF6\x1A\xE2QA\xC5\x17""A\xF1\x05""d\x15\xD3""A\xF1T\x9D\x1E\xAE\xC8\xD6""3\x0F""e\xEC\xEF(\xB9\x15\xD8\x9A\xE1}%\xBB\x16\xE4\xCFK\xB9\x94\x03@\xDF""2_\x9A\x13\xBA\xC8\xD5%\x87W\xD2\x1A\xE1\x05\xE4\x81>A\xF1\xD5\x88S\xA4\xC8\xD5X\xBD\xFD\x19\xC8\xD5X\xC6,{\x1B""CR\x01\xB4\x07\xE7tP\xE4\x04\xC2\xC8\xD5""6$?m\x84[_\xF4K\x8D\xC8\xE1\xC3\x9A\xEDT\x18+^.R\xD9\xC8\xD5m\xBE/\xF2\xC8\xD5""3\x0F\n\x95\xAF\xC8\x05\xBD\xAE_\xC0\fl;\b\x8F\xEA`\xD2""6 \xB8\xC0\x03\xBC\x8F\x12


#1 [uidab 12-02 14:36]
大哥,你在for循环里面这么移动指针,会把自己搞死的。

p += i;

你把这句改成 p += 6;
而且不能放在那个位置,才能和原来的效果一样。
#2 回 uidab 的帖子 [spygg 12-03 23:20]
uidab:大哥,你在for循环里面这么移动指针,会把自己搞死的。

    p += i;

你把这句改成 p += 6;
....... (2018-12-02 14:36) 
嗯嗯,谢谢了,还以为是Qt的bug
#3 回 uidab 的帖子 [lanmanck 06-07 17:19]
uidab:大哥,你在for循环里面这么移动指针,会把自己搞死的。

    p += i;

你把这句改成 p += 6;
....... (2018-12-02 14:36) 
也不会死,只要
p1 = p;
p1 += i;
就行了

回复 发表
主题 版块