代码之家  ›  专栏  ›  技术社区  ›  Drawkcab Esrever

编码比原始文本大:如何获取0和1的字符串并将其作为实际字节写入文件

  •  0
  • Drawkcab Esrever  · 技术社区  · 7 年前

    我有一个LZ77(滑动窗口)的实现 C++ 它能够成功地获取一个文件,并将0s1的输出和编码输出到另一个文件。唯一的问题是 输出文件 起初的 .

    我发现这是因为我使用字符串来表示位字符串,并将这些字符串写入文件。

    我想知道我怎样才能把这些0-1的字符串标记作为字节写入文件以节省空间。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Drawkcab Esrever    7 年前

    最后我想到了

        unsigned char str_to_byte(std::string s){
        std::bitset<8> b(s);
        return static_cast<unsigned char> (b.to_ulong());
    }
    
    
        void write(std::string s,std::ostream& out)
    {
        size_t len = s.length();
        std::string tstring;
        unsigned char c;
        if (len < 8){
            tstring = pad_string(s, 8);
            c = str_to_byte(tstring);
            //std::cout << tstring << std::endl;
            out << c;
            return;
        }
        size_t i = 0 ;
        for (; i < len; i+=8){
            tstring = s.substr(i,8);
            //std::cout << tstring << std::endl;
            c = str_to_byte(tstring);
            out << c;
        }
        if (i != len){
            i = i-8;
            tstring = pad_string(s.substr(i,8),8);
            //std::cout << tstring << std::endl;
            c = str_to_byte(tstring);
            out << c;
        }
    }
    
    推荐文章