【问题标题】:C++, Storing a String containing binary into a text fileC ++,将包含二进制文件的字符串存储到文本文件中
【发布时间】:2013-03-23 14:17:27
【问题描述】:

我目前正在尝试存储包含二进制代码的字符串。

当我尝试将此字符串写入文本文件时,它只是以字符串格式存储每个 0 和 1 字符,而不是按照我的要求将其存储为 8 位块。这会导致文件比预期的大,考虑到它使用 8 位来存储 0 和 1。

我应该将字符串写入 .bin 文件而不是 .txt 文件吗? 如果是这样,我将如何去做,如果可能的话,还有一些工作代码的例子。

感谢您提前提供的任何建议。

   string encoded = "01010101";    
   ofstream myfile;   
   myfile.open ("encoded");   
   myfile <<  encoded;   
   myfile.close();   

澄清: 我有一个由 1 和 0 组成的字符串(由霍夫曼树产生),我希望将此字符串分成 8 位块,我希望将所述缝隙表示的每个字符写入压缩文件。

【问题讨论】:

  • 您有充分的理由将二进制数据存储在字符串中吗?不能使用用于存储二进制数据的东西?
  • 我正在尝试存储通过使用霍夫曼树对文本进行编码产生的二进制文件。我遇到的问题是以 8 位压缩方式将二进制文件写入文件。

标签: c++ binaryfiles fstream ofstream huffman-code


【解决方案1】:

std::bitset 可以将字符串转换为整数。

std::bitset<8> bits("01010101");
cout << bits.to_ullong();

【讨论】:

    【解决方案2】:

    我只是猜测,因为您没有显示任何代码,但您似乎有一个包含 字符 '1''0' 的字符串。如果你把它写到一个文件中,它当然会是一个文本。您需要先将其转换为整数。

    参见例如std::stoistd::strtol 用于将任意基数的字符串转换为整数的函数。

    【讨论】:

      【解决方案3】:

      我应该将字符串写入 .bin 文件而不是 .txt 文件吗?

      如果你愿意的话……但这也没有什么不同。 ofstream 不关心文件名。只需将字符串转换为字节 (uint8_t) 并将该字节写入文件:

      string s = "10101010";
      uint8_t byte = strtoul(s.c_str(), NULL, 2);
      myfile << byte;
      

      【讨论】:

      • 喜欢吗? string test = "01010101"; uint8_t byte = strtoul(test.c_str()); ofstream myfile3; myfile3.open ("binary.txt"); myfile3 &lt;&lt; test; myfile3.close();@H2CO3
      • @user2202417 是的,除了我不小心遗漏了strtoul 的两个参数。见编辑。
      猜你喜欢
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2011-09-25
      • 1970-01-01
      • 2017-04-27
      • 2011-09-07
      相关资源
      最近更新 更多