微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 QDataStream 转换 littleEndian

如何解决通过 QDataStream 转换 littleEndian

我想通过网络发送一些整数(int32_t)。

为此,我首先转换整数并发送它们。

p.x = 129;
p.y = 42;
p.d = counter++;

converted[0] = htonl(p.x);
converted[1] = htonl(p.y);
converted[2] = htonl(p.d);
if ( (bytes = send(socket,(char *)converted,pointSize,0)) < 0)
        {
            std::cerr << "bytes = " << bytes << std::endl;
        }

然后 Qt 应该做这项工作,所以我尝试了 QDataStream 转换,但失败了,值 > 128 变为负数。所以目前我做这样的转换:

   while ( socket->bytesAvailable() > 0 )
   {
       //qDebug() << "Data received" << socket->bytesAvailable();
       m_data.append(socket->readAll());
       //qDebug() << "Buffer " << m_data.size();
       if (m_data.size() >= sizeOfPoint)
       {
           Point x;
           QByteArray b = m_data.left(sizeOfPoint);
           for (int i = 0; i < 4; i++)
           {
               x.x += (u_int8_t) b[i] << 8*(3-i);
           }
           for (int i = 4; i < 8; i++)
           {
               x.y += (u_int8_t) b[i] << 8*(7-i);
           }
           for (int i = 8; i < 12; i++)
           {
               x.d += (u_int8_t) b[i] << 8*(11-i);
           }

           //x.x = (u_int8_t) (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3]);
           //x.y = (b[4] << 24) | (b[5] << 16) | (b[6] << 8) | (b[7]);
           //x.d = (b[8] << 24) | (b[9] << 16) | (b[10] << 8) | b[11];
           //x.d = b[10] << 8;
           //x.d = (b[11]);

           //QDataStream in(buffer.data());
           //in.setByteOrder(QDataStream::LittleEndian);
           //in >> conv[1];
           //in >> conv[2];

           qDebug() << "Data provided " << x.x << " " << x.y << " "<< x.d;
            m_data.remove(0,sizeOfPoint);
       }
   }

转换这些整数的最佳方法是什么,for 循环对我来说似乎不是最佳选择。

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。