C#二进制编写器定制

时间:2012-07-14 16:03:15

标签: c# c++ binary writer

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

例如:

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

在C ++中:

fread(&myInt, 1, sizeof(int), fileHandle);
fread(&myBool, 1, sizeof(bool), fileHandle);
编辑:从我所看到的,如果一个字符串的长度足够小以适应一个字节,那就是它写入的方式,如果我想用C ++读回来那就不好了。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以选择一些选项:

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