【发布时间】:2018-03-18 07:10:53
【问题描述】:
当我打开文件的 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 的对立面,它可以工作。可以直接写数字吗?
【问题讨论】:
-
将未格式化的数据写入
std::ostream的唯一选项是write()和put()。而已。选择一个。 -
我不知道你的最终申请,但是根据给出的信息,我可能会选择忘记
ostream回到简单的旧 C 语言,例如 "(f)read, (f)write, ( f)open" (stackoverflow.com/questions/17598572/…) -
只是为了上下文,我正在写一堆缓冲区,所以 ofstream::write() 很好,但我想做的是首先放入一些标题信息,比如大小,所以就像在开头插入一个或两个快速数字。暂时先做这件事似乎很奇怪,但是哦。
-
从右值生成左值的方法是创建临时值:
auto lvalue = whatever_that_gives_you_a_rvalue;;) -
写入(内联)函数,将
int写入ofstream。问题解决了。