我认为这个问题应该由社区来识别和解决,但似乎我用错误的关键词进行搜索,或者它真的难以捉摸。
问题很简单。我想定义一个结构,其中应该定义动态数据容器(Vector,List,Queue,无论什么工作)。
Example exstr;
qDebug()<<sizeof(exstr);
exstr.bar.push_back(12);
exstr.bar.push_back(5);
qDebug()<<sizeof(exstr);
我需要将整数值插入此Vector(或采用任何其他Qt / STL容器),我想将此结构的内容复制到字节数组,以便将其原始数据写入文件。 / p>
我遇到的是当我编写以下代码时:
8
8
显示值:
'django.contrib.admin'
现在,这可能是因为QVector只是一个指向连续数据的普通指针,但我需要的是一个动态可调整大小的数据容器(它也可以调整其所在的结构大小)并允许我使用我尝试序列化时,逐字节的内容。
感谢您的帮助。
答案 0 :(得分:1)
QDataStream 允许您序列化一些Qt数据类型:Serializing Qt Data Types
QDataStream stream(&file); // we will serialize the data into the file
stream << your_qvector_obj;
//...
QVector<int> new_vec;
stream >> new_vec;
//...
答案 1 :(得分:0)
您与QVector一起走在正确的轨道上。 STL矢量类也可以工作。这两个类都保证将它们的值存储在连续的内存中。
对于QVector,你需要这样的东西:
memcpy (dest, bar.data(), bar.count () * sizeof (int));
对于STL向量,您获取第一个元素的地址:
memcpy (dest, &bar[0], bar.size () * sizeof (int));
在这两种情况下,&#34; dest&#34;必须足够大才能保存您正在复制的数据。我在这里使用复制作为例子;如果你只需要一个指向数据的指针,那么QVector :: data提供了对于STL向量,第一个元素的地址提供它。