在遍历
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<quint32>(p);
- quint16 uiPort = qFromBigEndian<quint16>(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<quint32>(p);
- quint16 uiPort = qFromBigEndian<quint16>(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<i\x01v\xBD\xCB""2\xB6\xE5\xB0\x1F@'\xC8\xD5\xB3\xC6\x14\xEE\xC8\xD5Ox\x95\x07\xC8\xD5\xB1\x1E""2\x1F\xDA\xEAN\xF9\x94\f\xC8\xD5\xAD\xE1\xD8\xB6#'e"