これらの2つの関数は、QVectorをシリアル化しようとしています。私の上司は実装がQtに依存せず、QDataStreamがヘッダを前に付ける必要があるので、残念ながらQDataStreamを使用することはできません。だから、関数binToVectorから返されるベクトルは、サイズが0に等しいことを返しますが、要素が印刷されていれば元のベクトルと等しくなります。ベクトルが元の要素と等しい場合、返されるサイズはなぜゼロですか?これらのシリアル化関数は正常ですか?私はそれを実装するためにQt関数を使うことはできません.C++だけです。QVector size()はゼロサイズを返します
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を使っているプロジェクトが同じシリアル化されたデータを使うことを望むなら。 –