4

有没有办法自定义二进制编写器写入文件的方式,以便我可以从 C++ 程序中读取文件?

例如:

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

在 C++ 中:

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

编辑:据我所见,如果字符串的长度足够小以适合一个字节,那么这就是它的写入方式,如果我想用 C++ 将它读回,那就不好了。

4

2 回答 2

1

如果要保证二进制兼容性,c# 中最简单的方法可能是放弃二进制编写器,而只使用流自己编写字节。这样您就可以完全控制输出数据

另一种方法是创建一个可以使用 c++/cli 写入数据的程序集,这样您就可以从托管代码中获得与 c++ 的直接兼容性。

于 2012-07-14T19:03:03.193 回答
0

您可以选择一些选项:

  • 自己一个字节一个字节地写。这可能是最糟糕的选择。它需要在双方(序列化和反序列化方面)做更多的工作。
  • 使用一些跨平台的序列化器,比如 Protobuf。它具有适用于几乎所有平台的端口,包括 C# (protobuf-net) 和 C++。而且它也很容易使用并且具有非常好的性能。
  • 您可以使用 Struct 并使用 Marshal.PtrToStructure 将其转换为字节数组(如果您需要其他方式,可以使用 Marshal.StructureToPtr)。互联网上有很多例子。如果您可以使用托管 CPP,则可以使用相同的对象,这样您就可以在一个地方更改结构,并且在两个地方都会更改。
  • 如果您使用托管 CPP,则可以使用内置序列化程序,例如 BinaryFormatter...
于 2012-07-14T19:47:27.583 回答