c++ - 如何将数字直接写入 ofstream 对象?

标签 c++ file ofstream

当我打开文件的 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,并且似乎没有办法从右值生成左值。我想从技术上讲,右值会持续到行尾,所以如果有 std::move 相反的值它可以工作。可以直接写数字吗?

最佳答案

So I could do:

你可以做得更好:

void writeInt( std::ostream &os, int i )
{
    os.write( reinterpret_cast<const char*>(&i), sizeof( i ) );
}

然后将其与右值或左值一起使用:

int i = 0;
writeInt( f, i );
writeInt( f, 5 );
writeInt( f, funtionReturnsInt() );

无论如何您都应该这样做,因为您稍后可能想要更改存储/加载数据的格式,这样您只需更改一次。

关于c++ - 如何将数字直接写入 ofstream 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46606401/

相关文章:

file - 如何拦截文件 ://requests to provide a directory listing?

c++ - 如何恢复将数据附加到特定位置的文件? (std::ostream, streampos, tellp/seekp)

c++ - c++新手被卡住了

C++ 查找 ofstream 的大小

c++ - 从容器中检索函数指针

c++ - 当使用 'new int[n]' 声明一个新数组时,为什么它没有出现在本地列表中?

c# - Visual Basic "Module not Found"错误

Python遍历目录并打开txt文件

c++ - 避免获取子字符串?

c++ - 如何在 Windows 应用商店应用程序中从 C++ 访问 System.Environment?