我有:
typedef unsigned char;
std::vector<byte> data;
我试图以这种方式将数据保存到文件中(但我有错误):
fstream file(filename,ios::out);
file.write(&data, data.size());
如何处理或投射数据以将其写入文件。
答案 0 :(得分:6)
要将矢量存储在文件中,您必须编写矢量的内容,而不是矢量本身。您可以使用&vector[0]
访问原始数据,第一个元素的地址(假设它包含至少一个元素)。
ofstream outfile(filename, ios::out | ios::binary);
outfile.write(&data[0], data.size());
这在编写时应该相当有效。 fstream
是通用的,如果您要写,请使用ofstream
。
答案 1 :(得分:4)
*声明file.write(&buffer[0],buffer.size())
出错:
错误C2664:&#39; std :: basic_ostream&lt; _Elem,_Traits&gt; :: write&#39; :不能 转换参数1来自&#39; unsigned char *&#39; to&#39; const char *&#39;
*在我的编译器(VS2008)中,我没有vector的data()方法。
我认为以下是正确的:
file.write((const char*)&buffer[0],buffer.size());
答案 2 :(得分:3)
使用vector::data获取指向基础数据的指针:
file.write(data.data(), data.size());
答案 3 :(得分:2)
您要传递第一个元素的地址,而不是矢量对象本身的地址。
&data[0]
注意:在执行此操作之前,请确保向量不为空。
答案 4 :(得分:1)
许多这样的解决方案只是部分完成(缺少包含和强制转换),所以让我发布一个完整的工作示例:
#include <vector>
#include <fstream>
int main()
{
std::vector<std::byte> dataVector(10, std::byte{ 'Z' });
const std::string filename = "C:\\test_file.txt";
std::ofstream outfile(filename, std::ios::out | std::ios::binary);
outfile.write(reinterpret_cast<const char*>(dataVector.data()), dataVector.size());
return 0;
}
答案 5 :(得分:0)
我认为ostream.write(myVector [0],...)将无法正常工作,因为它无法读取向量(我有)。 什么有效是ostream.write(MyVector.data(),...) 注意:对于阅读使用ifstream.read(const_cast(MyVector.data()),...)