C++ 如何使用c+以二进制模式将向量写入文件+;?

C++ 如何使用c+以二进制模式将向量写入文件+;?,c++,vector,C++,Vector,到目前为止我试过这个 #include<iostream> #include<fstream> #include <stdlib.h> #include<vector> using namespace std; int main() { unsigned short array[3]={0x20ac,0x20ac,0x20ac}; vector<unsigned short> v; std::ofstream fil

到目前为止我试过这个

#include<iostream>
#include<fstream>
#include <stdlib.h> 
#include<vector>
using namespace std;
int main()
{
   unsigned short array[3]={0x20ac,0x20ac,0x20ac};
   vector<unsigned short> v;
   std::ofstream file;
   file.open("1.txt", std::ios_base::binary);
   file.write((char*)(array), sizeof(array));
   v.push_back(array[0]);
   v.push_back(array[1]);
   v.push_back(array[2]);
   file.write((char *)v,sizeof(v));
   file.close();
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
无符号短数组[3]={0x20ac,0x20ac,0x20ac};
向量v;
流文件的std::of;
open(“1.txt”,std::ios\u base::binary);
write((char*)(array),sizeof(array));
v、 推回(数组[0]);
v、 推回(数组[1]);
v、 推回(数组[2]);
write((char*)v,sizeof(v));
file.close();
}
我收到一条错误消息 stan.cpp:在函数“int main()”中:
stan.cpp:21:23:错误:从类型“std::vector”转换为类型“char*”无效。

您必须找到指向第一个元素的指针,然后根据元素的v*大小中的元素数计算字节数:

file.write((char*)(&v[0]), v.size() * sizeof(v[0])) ;
输出:

% od -x 1.txt
0000000 20ac 20ac 20ac

您应该逐个写入每个元素,或者通过
write(v.data(),v.size()*sizeof(unsigned short))写入整个数据。

您可以看看这里:关于字节顺序依赖性的常见注释适用。(也就是说,如果你从一台小端机器上写数据,你在读取它时必须在一台大端机器上做额外的工作,反之亦然。)是的,字节顺序应该根据代码的实际使用情况来考虑。我喜欢
sizeof(v[0])
sizeof(unsigned short)更好
因为如果有人愚蠢地更改了向量的类型,那么第一种形式将不需要更新,因此遵循DRY原则。