查看完整版本: [-- QByteArray的constData遍历问题 --]

QTCN开发网 -> Qt基础编程 -> QByteArray的constData遍历问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

spygg 2018-12-01 22:42

QByteArray的constData遍历问题


在遍历QByteArray的constData()时遇到问题,希望大神可以帮忙解惑,一种方法是每一次都取constData(),另一种方法是在循环开始前获取constData()后面每次只是移动指针(该方法会给出异常结果),代码如下:
第一种方法:
  1. 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);
    }


第二种方法(结果错误)
  1. 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"




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

    p += i;

你把这句改成 p += 6;
而且不能放在那个位置,才能和原来的效果一样。

spygg 2018-12-03 23:20
uidab:大哥,你在for循环里面这么移动指针,会把自己搞死的。
    p += i;
你把这句改成 p += 6;
....... (2018-12-02 14:36) 

嗯嗯,谢谢了,还以为是Qt的bug

lanmanck 2022-06-07 17:19
uidab:大哥,你在for循环里面这么移动指针,会把自己搞死的。
    p += i;
你把这句改成 p += 6;
....... (2018-12-02 14:36) 

也不会死,只要
p1 = p;
p1 += i;
就行了


查看完整版本: [-- QByteArray的constData遍历问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled