2013-03-23 2 views
2

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

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

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

Благодарим за любые советы заранее.

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

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

+0

У вас есть веская причина для хранения двоичных данных в строках? Не можете использовать что-то, предназначенное для хранения двоичных данных? – Pubby

+0

Я пытаюсь сохранить двоичный файл, полученный в результате кодирования текста, используя дерево Хаффмана. Проблема, с которой я столкнулась, заключается в том, чтобы записать двоичный файл в файл в 8-битном сжатом виде. – user2202417

ответ

0

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

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

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

Нравится? 'string test =" 01010101 "; uint8_t byte = strtoul (test.c_str()); ofstream myfile3; myfile3.open ("binary.txt"); myfile3 << тест; myfile3.close(); '@ H2CO3 – user2202417

+0

@ user2202417 Да, за исключением того, что я случайно оставил два аргумента' strtoul'. См. Править. – 2013-03-23 16:40:03

1

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

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

1

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

std::bitset<8> bits("01010101"); 
cout << bits.to_ullong(); 
Смежные вопросы