這2個函數是我嘗試序列化一個QVector。不幸的是我不能使用QDataStream,因爲我的老闆要求實現獨立於Qt,並且QDataStream要預先設置一個頭。所以問題是由函數返回的矢量binToVector返回一個等於0的大小,但是如果元素被打印出來,它們就等於原始矢量。爲什麼返回的大小是零,如果矢量的元素等於原始的?這些序列化功能可以嗎?我無法使用boost,也沒有Qt函數來實現它,只有C++;QVector大小()返回大小爲零
QByteArray vectorToBin(const QVector<qint32> & vec)
{
QByteArray result;
foreach(quint32 e, vec) {
char *src = reinterpret_cast<char*>(&e);
result.append(src, sizeof(qint32));
}
return result;
}
QVector<qint32> binToVector(const QByteArray & bytes)
{
int size = sizeof(qint32);
QVector<qint32> result;
result.reserve(bytes.count()/size);
int j=0;
for(int i=0; i<bytes.count(); i+=size) {
memcpy(&result[j++], bytes.constData()+i, size);
}
return result;
}
你的老闆想要......序列化QT數據結構......不使用QT? – Puppy
你已經在使用QVector,所以你的實現不能獨立於Qt。如果它的頭問題,然後嘗試前向聲明。編寫什麼QDataStream基本上是重新發明輪子。問你的老闆他是否會重新發明輪子:)) – blueskin
這種@DeadMG。他希望序列化*發生*的數據以存儲在項目當前化身中的Qt數據結構中。他不希望被綁定到Qt的序列化格式,因爲他們有一天決定使用某個特定的Qt類以外的東西,或者他們希望其他非Qt使用的項目能夠使用相同的序列化數據。 –