新蜜蜂来了。我很抱歉,如果有类似的问题,但我只是不知道如何正确地问它。问题是,我必须为大学做一些项目,现在我被困住了。我是通过udp获得信息,需要存储输出信息,以传递给对象(汽车坐标),我必须为20个对象这样做,因此它要复杂得多。我有这段代码,它应该是我的教授。告诉我了,但我得自己想办法把它储存起来。试过QList和QMap,但我想不出怎么可能
anArraynum.posX=somenumber;
所以我必须存储每辆车的坐标,当car1.x,car1.y,car1z,然后循环计数增加;car2.x等等。
我不知道我的问题或我想问的问题是否足够清楚,但请耐心等待
while(mSocket->hasPendingDatagrams()){
QByteArray datagram;
QHostAddress crrAddress;
quint16 crrPort;
datagram.resize( int(mSocket->pendingDatagramSize()) );
mSocket->readDatagram(datagram.data(), datagram.size(), &crrAddress, &crrPort);
double* resultList = new double[(datagram.size() / int(sizeof(double))) ];
memcpy(&resultList[0], datagram.data(), size_t(datagram.size()));
for(quint16 count = 0; (count) < mVehicleCount; count++) {
mVehicleMap[mArrayOffset + count].ID = int16_t(resultList[7 + 11 * count]);
mVehicleMap[mArrayOffset + count].pose.position.x = resultList[(1 + 11 * count)];
mVehicleMap[mArrayOffset + count].pose.position.y = resultList[(2 + 11 * count)];
mVehicleMap[mArrayOffset + count].pose.position.z = resultList[(3 + 11 * count)];
mVehicleMap[mArrayOffset + count].pose.orientation.x = resultList[(6 + 11 * count)];
}
delete[] resultList;
发布于 2016-06-07 21:36:44
您可以使用QList
或QVector
类来实现目标(Qt文档:QList、QVector)。
QVector
的简单示例
struct Vehicle
{
qint16 ID_;
double position_x_;
double position_y_;
double position_z_;
double orintation_x_;
};
...
QVector<Vehicle> vehicles(maxVehicleCount); // maxVehicalCount - you variable
...
while(mSocket->hasPendingDatagrams()){
QByteArray datagram;
QHostAddress crrAddress;
quint16 crrPort;
datagram.resize( int(mSocket->pendingDatagramSize()) );
mSocket->readDatagram(datagram.data(), datagram.size(), &crrAddress, &crrPort);
double* resultList = new double[(datagram.size() / int(sizeof(double))) ];
memcpy(&resultList[0], datagram.data(), size_t(datagram.size()));
for(quint16 count = 0; (count) < mVehicleCount; count++) {
vehicles[mArrayOffset + count].ID_ = qint16(resultList[7 + 11 * count]);
vehicles[mArrayOffset + count].position_x_ = resultList[(1 + 11 * count)];
vehicles[mArrayOffset + count].position_y_ = resultList[(2 + 11 * count)];
vehicles[mArrayOffset + count].position_z_ = resultList[(3 + 11 * count)];
vehicles[mArrayOffset + count].orintation_x_ = resultList[(6 + 11 * count)];
}
delete[] resultList;
}
您还可以使用QMap
类(Qt加法:QMap):
struct Vehicle
{
qint16 ID_;
double position_x_;
double position_y_;
double position_z_;
double orintation_x_;
};
...
QMap<qint16, Vehicle*> vehicleMap;
...
while(true/*mSocket->hasPendingDatagrams()*/){
QByteArray datagram;
QHostAddress crrAddress;
quint16 crrPort;
datagram.resize( int(mSocket->pendingDatagramSize()) );
mSocket->readDatagram(datagram.data(), datagram.size(), &crrAddress, &crrPort);
double* resultList = new double[(datagram.size() / int(sizeof(double))) ];
memcpy(&resultList[0], datagram.data(), size_t(datagram.size()));
for(quint16 count = 0; (count) < mVehicleCount; count++) {
Vehicle* vehicle = new Vehicle();
vehicle.ID_ = qint16(resultList[7 + 11 * count]);
vehicle.position_x_ = resultList[(1 + 11 * count)];
vehicle.position_y_ = resultList[(2 + 11 * count)];
vehicle.position_z_ = resultList[(3 + 11 * count)];
vehicle.orintation_x_ = resultList[(6 + 11 * count)];
vehicleMap.insert(vehicle.ID_, vehicle);
}
delete[] resultList;
}
https://stackoverflow.com/questions/37690567
复制相似问题