Я работаю над проектом с файлами. Часть 1 проекта заключалась в том, чтобы добавлять/удалять и сортировать некоторые obejcts в текстовый файл, поэтому я уже реализовал эти функции. Теперь часть 2 также поддерживает двоичные файлы - средства для добавления/удаления и сортировки двоичных файлов. Мое мышление состоит в том, чтобы иметь некоторую «магическую функцию», которая преобразует двоичный файл в текстовый файл, чем использовать мою функцию выше (потому что они поддерживают только текстовые файлы), делать любые запросы - добавлять \ удалять obejcts; Затем преобразовать его с помощью «волшебной функции» из текстового файла в двоичный файл. Каждая строка внутри текстового файла представляет собой объект, называемый «кандидат». Он имеет следующие поля: string id, имя строки, имя строки, строка участника , например, 1-я строка выглядит так: 201, Donald, Trump, Republican Любое предложение, где найти эту «магическую функцию»? Спасибо в продвинутом режиме.Двоичный файл в текстовый файл и текстовый файл в двоичный файл
ответ
Существует не общий способ преобразования текста и двоичных данных, поскольку вам необходимо знать, что данные означает, и это неясно, особенно в случае двоичных данных.
Ваш класс уже знает, что означает ваши данные, поэтому только ваш класс может надежно читать себя как текст и записывать себя как двоичный, или наоборот. Но как только вы выполнили чтение и запись в текстовом или двоичном виде в своем классе, необходимость в преобразовании уходит.
Я уверен, что выполнение чтения и записи в виде текста или двоичного кода в вашем классе - это то, что вас просили сделать в первую очередь.
Ваш класс содержит только std::string
s. Там нет стандартного способа записи их в качестве двоичного, но один пути, чтобы сначала написать длину, а затем записать содержание:
void WriteString(const std::string& s, std::ofstream& os)
{
size_t size = s.size();
os.write(reinterpret_cast<char*>(&size), sizeof(size_t));
os.write(s.c_str(), size);
}
Обратный процесс чтения означает первое чтение длины, а затем содержимое. Вы не можете прочитать содержимое прямо в std::string
, потому что его буфер памяти не гарантируется быть смежными, так что вам нужно использовать std::vector<char>
в качестве посредника:
std::string ReadString(std::ifstream& is)
{
size_t size;
is.read(reinterpret_cast<char*>(&size), sizeof(size_t));
std::vector<char> buffer(size);
is.read(&buffer[0], size);
return std::string(&buffer[0], size);
}
Теперь, чтобы писать или читать ваши Candidate
объекты, как двоичный, вам просто нужно использовать эти две функции для записи или чтения полей по одному:
void Candidate::Write(std::ofstream& os) const
{
WriteString(id, os);
WriteString(name, os);
WriteString(last_name, os);
WriteString(party, os);
}
void Candidate::Read(std::ifstream& is)
{
id = ReadString(is);
name = ReadString(is);
last_name = ReadString(is);
party = ReadString(is);
}
Вам понадобится конструктор по умолчанию для Candidate
класса, чтобы создать «пустые» объекты для чтения, и вы будете вероятно, хотят написать число кандидатов в верхней части файл, чтобы вы знали, сколько нужно прочитать.
Существует много больше для двоичных файлов, чем это - вы, вероятно, захотите реализовать случайный доступ, чтобы действительно получить преимущества - но это должно вас начать.
- 1. Обработка файлов Текстовый файл или двоичный файл
- 2. Попытка написать двоичный файл, получить текстовый файл
- 3. Ruby - Net :: FTP - двоичный и текстовый файл
- 4. Преобразовать текстовый файл с номерами в двоичный
- 5. BASH - Преобразовать текстовый файл, содержащий двоичные числа в двоичный файл
- 6. Распаковать двоичный файл в текстовый файл - проблема, которая переворачивает значения
- 7. Python читает текстовый файл как двоичный?
- 8. C- Правильно читать двоичный текстовый файл?
- 9. Svn обрабатывает мой текстовый файл как двоичный
- 10. Добавить двоичный файл в другой двоичный файл
- 11. создать двоичный файл
- 12. конвертировать двоичный файл в текст
- 13. Чтение заголовка двоичный файл в SEGY файл
- 14. Скопировать двоичный файл в экземпляр
- 15. Сохранение данных в текстовый файл
- 16. Как интерпретировать двоичный двоичный файл
- 17. Двоичный файл Отказано в
- 18. Запись в двоичный файл
- 19. Запись в двоичный файл?
- 20. двоичный файл в строку
- 21. C++, Сохранение строки, содержащей двоичный код, в текстовый файл
- 22. Почему файл индекса git двоичный?
- 23. Filestreams чтение и запись в текстовый файл, затем преобразование в двоичный файл в C++
- 24. C# Текстовый текстовый файл
- 25. Текстовый текстовый файл в Java
- 26. Отформатированный текстовый текстовый файл
- 27. записи в текстовый файл и читать этот текстовый файл
- 28. пишите двоичный файл в файл docx
- 29. Как написать двоичный файл в файл
- 30. читать файл двоичный файл в xna?
Поиск в Google для «кодировки base64». –
Я не думаю, что это было бы в духе требования. Причина использования двоичных файлов заключается в том, что они упрощают добавление и удаление объектов. –
@MartinBroadhurst, так что вы предлагаете? –