Кодировка больше исходного текста: как взять строки из нулей и единиц и записать их как настоящие байты в файл - PullRequest
0 голосов
/ 06 июня 2018

У меня есть реализация LZ77 (скользящее окно) в C++, которая может успешно принимать файл и выводить и кодировать 0s 1s в другой файл.Единственная проблема в том, что выходной файл больше, чем оригинал .

Я понял, что это потому, что я использую строки для представления битовых строк и записываю эти строки в файл.

Мне интересно, как я могу взять эти строковые токены из нулей и записать их в виде байтов в файл, чтобы сэкономить место.

1 Ответ

0 голосов
/ 06 июня 2018

В итоге вот что я придумал

    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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...