我有:
typedef unsigned char;
std::vector<byte> data;
我尝试以这种方式保存数据到文件中(但是我遇到了错误):
fstream file(filename,ios::out);
file.write(&data, data.size());
如何处理或转换数据以便将其写入文件。
我有:
typedef unsigned char;
std::vector<byte> data;
fstream file(filename,ios::out);
file.write(&data, data.size());
要将向量存储在文件中,您必须写入向量的内容,而不是向量本身。您可以使用&vector[0]
访问原始数据,即第一个元素的地址(假设它至少包含一个元素)。
ofstream outfile(filename, ios::out | ios::binary);
outfile.write(&data[0], data.size());
这应该在写入时非常有效。 fstream
是通用的,如果您要写入,请使用ofstream
。
&data[0]
可以替换为data.data()
,后者看起来更加简洁。 - niklasfiistream::write
的第一个参数需要是const char*
类型,然而在原始代码中,&data[0]
是unsigned char*
类型。 - M.M*语句file.write(&buffer[0],buffer.size())
出错:
错误 C2664:'std::basic_ostream<_Elem,_Traits>::write':无法将参数1从“unsigned char *”转换为“const char *”
*在我的编译器(VS2008)中,我没有vector的data()方法。
我认为以下是正确的:
file.write((const char*)&buffer[0],buffer.size());
file.write(reinterpret_cast<const char*>(&myVector[0]), myVector.size());
。 - Dipika使用vector::data获取指向底层数据的指针:
file.write(data.data(), data.size());
sizeof(char) == 1
,所以这是可以的。对于任何其他数据类型,请使用 file.write((char*) data.data(), data.size() * sizeof(data.front()))
。正如 @staticx 指出的那样,在打开 ofstream 时确保添加适当的标志:ofstream file(filename, ios::out | ios::binary);
。 - niklasfi &data[0]
#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;
}
我认为 ostream.write (myVector[0], ...) 不会起作用,因为它在读取到向量中也不起作用(我试过了)。 有效的方法是使用 ostream.write(MyVector.data(), ...) 注意:要进行读取,请使用 ifstream.read(const_cast(MyVector.data()), ...)
data.size()
。 - Dipika