如何知道qt數據類型的字節大小;包括QString對象,如果這些數據類型寫在某些QFile上的話。我必須在Student類中實現sizeOf()
函數,如下所示;像在我們C. sizeof(struct student)
計算Qt中對象的序列化大小
Student類
#include<QtCore>
class Student
{
public:
QString name,fname;
quint8 age,weight,clss;
Student(){
}
/*the following function should return the size of this object in bytes;
I will use QDataStream & operator<<(QDataStream &out, Student &f)
function to write data to a QFile */
qint16 sizeOf()
{
// needs implementation;
}
};
QDataStream & operator<<(QDataStream &out, Student &f)
{
out<<f.name<<f.fname<<f.age<<f.weight<<f.clss<<f.next;
return out;
}
QDataStream & operator>>(QDataStream &in, Student &f)
{
in>>f.name>>f.fname>>f.age>>f.weight>>f.clss>>f.next;
return in;
}
我知道,數據可以與QDataStream & operator>>(QDataStream &in, Student &f)
讀取;但我想知道尺寸也適用於其他一些情況。
這並沒有給我一個有效的文件大小。看起來Qt在序列化時增加了一些額外的位;可能是爲了不同平臺上的端到端獨立性。實際尺寸總是大於通過sizeOf()
功能
qint16 sizeOf()
{
qint16 size=0;
size+=sizeof(quint8)*3; // size of age, weight and clss
//variables all have type quint8
size+=name.size()*16; // number of characters in string
// multiply with 16 bit QChar
size+=fname.size()*16;
return size;
}
我使用一個QFile,QDataStream API返回。在Windows 8上的Qt版本4.8。
'size + = sizeof(quint8 * 3)'只是一個輸入錯誤。我編輯了這個問題。 – stackOverflow
爲了首先初始化,然後傳遞給流的構造函數,不應該在QDataStream流的上面添加'QBuffer data'成員? – Spyros
@Spyros - 沒錯,在這種情況下似乎沒有任何問題,但下一次可能不那麼幸運。 – dtech