C++写入字节的文件矢量

C++ Writing to file vector of byte

本文关键字:文件 字节 C++      更新时间:2023-10-16

我有:

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

*语句file.write(&buffer[0],buffer.size())出错:

错误C2664:"std::basic_stream&lt_Elem,_Traits>::写':不能将参数1从"unsigned char*"转换为"const char*">

*在我的编译器(VS2008(中,我没有矢量的data((方法。

我认为以下是正确的:

file.write((const char*)&buffer[0],buffer.size());

使用vector::data获取指针底层数据:

file.write(data.data(), data.size());

您要传递第一个元素的地址,而不是向量对象本身的地址。

     &data[0]

注意:在执行此操作之前,请确保矢量不为空。

许多这样的解决方案只是部分完整的(缺少include&casts(,所以让我发布一个完整的工作示例:

#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(((,…(