将文本文件转换为二进制流?

时间:2011-04-27 16:36:07

标签: c++

这段代码对吗?

如果这是对的,那么从二进制流到文本的相反方式的代码是什么?

#include <iostream>
#include <fstream>

int main()
{
   std::ifstream in("in.txt");
   std::ofstream out("out.bin", std::ios::binary);

   double d;
   while(in >> d) {
      out.write((char*)&d, sizeof d);
   }
}

这是输入文件

一个 问题的数量使视频服务器的设计,在一个 视频点播应用,很难。首先是视频服务器 需要同时为多个提供视频服务 客户并保证每个客户的服务质量。 其次,视频服务器需要管理系统资源, 包括CPU /磁盘/内存,以及安排网络活动等 最大限度地利用资源,而不是超载 系统。第三,视频服务器需要能够支持 各种VCR操作,如播放,快进, 慢进,暂停,恢复,索引和滚动。最后,一个 观看视频的用户可能会从一个服务更改为另一个服务 服务 - 例如,从回放到快进或从 播放慢进。视频服务器应该支持 在有效使用系统的同时,这些动态服 资源。

3 个答案:

答案 0 :(得分:0)

是的,这是正确的。相反,请与write交换read,然后您就在那里。

请注意,double的编码及其大小在不同的平台/系统/编译器上可能会有所不同,因此不建议使用此类存储,因此不建议使用临时存储。

答案 1 :(得分:0)

  

这段代码是对的吗?

这取决于你想要它做什么。你的程序所做的是读取一个完全由有理数和空格的文本表示组成的文本文件(例如1.2 5 99.0),并输出一个完全由这些相同数字的二进制表示组成的文件。

请注意,这些数字的表示细节是CPU-OS和/或编译器特定的。

这就是你想要的吗?

  

相反方式的代码是什么

相反的方法是读取由浮点数的二进制表示组成的文件,并输出具有相同数字的文本表示的文本文件。为此,您需要ifstream::read来自ios::bin文件的双打,并>>将数字添加到文本文件中。

请注意,转换不会完全正确。也就是说,您几乎肯定不会获得与最初开始时完全相同的输出文件,而是在语义上等效的输出文件。

答案 2 :(得分:-1)

嗯,这取决于你所说的“二进制流”。 在文本模式和二进制模式下打开的文件之间的区别在于,在二进制模式下,如果您读/写“\ r”,“\ n”或“\ r \ n”它们是字面读取/写入,而在文本模式下组成系统中行结束标记的字符将转换为“\ n”,请参阅this