Настройка двоичного писателя C#

Есть ли способ настроить способ записи двоичных файлов в файлы, чтобы я мог читать файл из программы на C++?

Например:

myBinaryWriter.Write(myInt);
myBinaryWriter.Write(myBool);

И в C++:

fread(&myInt, 1, sizeof(int), fileHandle);
fread(&myBool, 1, sizeof(bool), fileHandle);

РЕДАКТИРОВАТЬ: Из того, что я вижу, если длина строки достаточно мала, чтобы уместиться в один байт, то это так, как она пишет, что плохо, если я хочу прочитать его обратно в C++.

2 ответа

Решение

Если вы хотите гарантировать бинарную совместимость, возможно, самый простой подход из C# состоит в том, чтобы отключить двоичную запись и просто использовать поток для записи байтов самостоятельно. Таким образом, вы получаете полный контроль над выходными данными

Другой подход заключается в создании сборки, которая может записывать данные с использованием C++ / cli, чтобы вы могли получить прямую совместимость с C++ из управляемого кода.

У вас есть несколько вариантов, которые вы можете выбрать:

  • Пишем его побайтово. это, возможно, худший вариант. это требует больше работы с обеих сторон (сериализации и десериализации).
  • Используйте некоторые кроссплатформенные сериализаторы, такие как Protobuf. у него есть порты практически для любой платформы, включая C# (protobuf-net) и C++. и он также прост в использовании и имеет действительно хорошую производительность.
  • Вы можете использовать Struct и преобразовать его в байтовый массив с помощью Marshal.PtrToStructure (если вам нужен другой способ, вы можете использовать Marshal.StructureToPtr). В интернете много примеров. Если вы можете использовать Managed CPP, вы можете использовать один и тот же объект, чтобы вы могли изменить структуру в одном месте, и она изменится в обоих местах.
  • если вы используете Managed CPP, вы можете использовать встроенные сериализаторы, такие как BinaryFormatter...
Другие вопросы по тегам