C++写入字节的文件矢量
C++ Writing to file vector of byte
我有:
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<_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(((,…(
相关文章:
- 在UNIX系统中使用DIR查找文件的字节大小
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 如何在文件中查找字节序列
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 如何使用 fprintf 将连续的 512 字节保存到文件中
- 用于 progmem 的C++和头文件压缩的 Web 文件字节数组
- 为什么未关闭的文件大小为 4 字节
- 我能确定从文件中读取的 32 字节二进制数据等于 256 位吗?
- Ascii .txt文件到字节数组 - C++
- 多部分/表单数据丢失大文件的字节
- 我该如何循环遍历我的数组(缓冲区——包含一个文本文件),并将其打印成30字节的块
- 程序错误地读取了二进制文件的一个字节
- 如何从 C 或 C++ 格式的文件中删除字节?
- C++ - 将任何文件的字节读取到无符号字符数组中
- ofstream将额外的零字节写入Unix服务器上的文件
- 传输文件一次又一次地发送相同的字节
- 编码大于原始文本:如何获取零和一的字符串并将它们作为实际字节写入文件
- 查找二进制文件中字节序列的所有匹配项
- 如何从 GDI+ 图元文件对象获取原始图元文件字节