двоичные файлы — C ++, хранение строки, содержащей двоичный файл, в текстовый файл

В настоящее время я пытаюсь сохранить строку, содержащую двоичный код.

Когда я пытаюсь записать эту строку в текстовый файл, она просто сохраняет каждый 0 и 1 символ в строковом формате, а не сохраняет его в 8-битных блоках, как мне требуется. Это приводит к тому, что файл становится больше, чем предполагалось, учитывая, что для хранения каждого 0 и 1 используются 8 битов.

Должен ли я записать строку в файл .bin вместо файла .txt?
Если так, то как бы я поступил так, и, если возможно, пример с некоторым рабочим кодом.

Спасибо за любые советы заранее.

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

Разъяснение:
У меня есть строка, состоящая из 1 и 0 (полученная из дерева Хаффмана), я хочу разбить эту строку на 8-битные куски, я хочу записать каждый символ, представленный упомянутым chink, в сжатый файл.

2

Решение

Должен ли я записать строку в файл .bin вместо файла .txt?

Если ты так хочешь … Но это тоже ничего не изменит. ofstream не заботится о именах файлов. Просто преобразовать строку в байт (uint8_t) и запишите этот байт в файл:

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

Другие решения

std::bitset может преобразовать строку в целое число.

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

Я только догадываюсь, так как вы не показываете никакого кода, но, похоже, у вас есть строка, содержащая персонажи '1' а также '0', Если вы напишите это в файл, конечно, это будет как текст. Вы должны сначала преобразовать его в целые числа.

Смотрите, например std::stoi или же std::strtol для функций для преобразования строк произвольной базы в целые числа.

1
По вопросам рекламы [email protected]