c++ - 使用输出流创建的二进制输出文件的内容

标签 c++ string binaryfiles

此代码编译并执行。它只是打印内容 成二进制格式。但是输出与我的预期不同,即:

  1. 输出文件大小应比使用 std::cout 创建的文件小得多。
  2. 输出文件的内容应该是压缩的,因此当我们在编辑器中打开它时, 我们应该看不到内容。

但是为什么下面的代码没有像我希望的那样运行呢?我该如何相应地修改它?

#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

void WriteStr2BinFh(const string& St, ostream &fn)
{
   fn.write(St.c_str(), St.length());
}



int main  ( int arg_count, char *arg_vec[] ) {

    vector <string> Tags;
   // In principle we have millions of such tags
   // Hence we need to compress it into binary output.
    Tags.push_back("0000000000");
    Tags.push_back("0000101110");
    Tags.push_back("0133030122");
    Tags.push_back("0133132033");
    Tags.push_back("1002013320");
    Tags.push_back("1111111111");
    Tags.push_back("1301013133");
    Tags.push_back("3010112111");
    Tags.push_back("3203012113");
    Tags.push_back("3203012212");

    //prn_vec<string>(Tags, "\t");
    //cout << endl;

    ofstream outfile;
    outfile.open("MyOut.bin", ios::binary|ios::out);

    for (unsigned i=0; i <Tags.size(); i++) {
         WriteStr2BinFh(Tags[i]+"\t",outfile);
    }

    outfile.close();

    return 0;
}

最佳答案

Output file size should be much smaller that those created with std::cout

“用 std::cout 创建”是什么意思?
如果您要保存整数而不是字符串,它可能会小一些。

The content of output file should be compressed, hence when we open it in editor, we should not be able to see the content.

不,它不应该被压缩。您可以使用 Boost.Iostreams 库 http://www.boost.org/doc/libs/1_38_0/libs/iostreams/doc/index.html用于创建压缩文件。

为了便于理解,您可以认为二进制文件包含您可以在调试器中查看内存时看到的信息。

另外,对于以二进制格式输出,您应该对所有 vector 项使用写入流方法(如果使用 std::vector < int > 会有差异)。 (对于输出\t 你可以使用 operator << )

关于c++ - 使用输出流创建的二进制输出文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/684931/

相关文章:

压缩算法

binary - 受密码保护的 ZIP 文件的字节签名是什么?

c++ - C++头文件包含的静态分析

c++ - 如何使用来自不同目录的make文件中的文件

c++ - 你能制作一个接受 C++ 中的 vector 和数组的模板吗?

Java - 如何在运行时动态设置字符串

java - StrTokenizer 分割字符串的行为不一致

java - 按字母顺序排列字符串和反转字符串?

c++ - 二进制文件和兼容性标准信息 - C++/JAVA

c++ - HOG 使用 OpenCV、HOGDescriptor 在 C++ 中进行可视化