当我打开文件的ofstream对象时,我会这样做:
std::ofstream outFile("myfile");
然后我想要一些数字,但它唯一的方法是::write()
方法,它采用const char*
和一个大小。所以我能做到:
int temp = 5;
outFile.write((const char*)&temp, sizeof(int));
还有输入operator <<
,但我不想要格式化输入,我希望它写成纯二进制数据。我想知道我是否可以直接写作:
outFile.write(12, sizeof(int));
outFile.write(10, sizeof(int));
而不是创建临时或先前分配数组。我认为限制是我可以在论证中加入的唯一价值是RValue,并且似乎没有一种方法可以从左值进行左值。我从技术上讲,rvalue一直持续到行尾,所以如果有std::move
的反面,它可以工作。是否有可能直接写这些数字?
答案 0 :(得分:2)
所以我能做到:
你可以做得更好:
void writeInt( std::ostream &os, int i )
{
os.write( reinterpret_cast<const char*>(&i), sizeof( i ) );
}
然后将它与rvalue或左值一起使用:
int i = 0;
writeInt( f, i );
writeInt( f, 5 );
writeInt( f, funtionReturnsInt() );
你应该这样做,因为你以后可能想要更改存储/加载数据的格式,这样你只需要改变一次。
答案 1 :(得分:2)
我喜欢使用可以编写任何基本类型的模板:
template<typename T>
void write_item(std::ostream& os, const T& item) {
os.write(reinterpret_cast<const char *>(&item), sizeof T);
}
当然,您可能希望在那里设置一些约束,以避免尝试使用更复杂的类型。
答案 2 :(得分:0)
使用“&lt;&lt;”运营商。例如 os&lt;&lt; “123”; 任何字符串或对象都可以写入ostream而无需进行类型转换。