查看完整版本: [--
QByteArray的constData遍历问题
--]
QTCN开发网
->
Qt基础编程
->
QByteArray的constData遍历问题
[打印本页]
登录
->
注册
->
回复主题
->
发表主题
spygg
2018-12-01 22:42
QByteArray的constData遍历问题
在遍历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"
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