В настоящее время я пытаюсь сохранить строку, содержащую двоичный код.
Когда я пытаюсь записать эту строку в текстовый файл, она просто сохраняет каждый 0 и 1 символ в строковом формате, а не сохраняет его в 8-битных блоках, как мне требуется. Это приводит к тому, что файл становится больше, чем предполагалось, учитывая, что для хранения каждого 0 и 1 используются 8 битов.
Должен ли я записать строку в файл .bin вместо файла .txt?
Если так, то как бы я поступил так, и, если возможно, пример с некоторым рабочим кодом.
Спасибо за любые советы заранее.
string encoded = "01010101";
ofstream myfile;
myfile.open ("encoded");
myfile << encoded;
myfile.close();
Разъяснение:
У меня есть строка, состоящая из 1 и 0 (полученная из дерева Хаффмана), я хочу разбить эту строку на 8-битные куски, я хочу записать каждый символ, представленный упомянутым chink, в сжатый файл.
Должен ли я записать строку в файл .bin вместо файла .txt?
Если ты так хочешь … Но это тоже ничего не изменит. ofstream
не заботится о именах файлов. Просто преобразовать строку в байт (uint8_t
) и запишите этот байт в файл:
string s = "10101010";
uint8_t byte = strtoul(s.c_str(), NULL, 2);
myfile << byte;
std::bitset
может преобразовать строку в целое число.
std::bitset<8> bits("01010101");
cout << bits.to_ullong();
Я только догадываюсь, так как вы не показываете никакого кода, но, похоже, у вас есть строка, содержащая персонажи '1'
а также '0'
, Если вы напишите это в файл, конечно, это будет как текст. Вы должны сначала преобразовать его в целые числа.
Смотрите, например std::stoi
или же std::strtol
для функций для преобразования строк произвольной базы в целые числа.