2012-07-14 54 views
4

有沒有一種方法來定製二進制編寫器寫入文件的方式,以便我可以從C++程序中讀取文件?C#二進制編寫器定製

如:

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

而在C++:

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

編輯:從我所看到的,如果一個字符串的長度小到足以放入一個字節那麼這是怎麼了寫它,如果我想用C++讀取它,這是不好的。

+2

可能重複(http://stackoverflow.com /問題/ 2364077 /串行化式淨反序列化式-c)的 – 2012-07-14 16:05:55

回答

1

如果你想保證二進制兼容性,可能來自c#的最簡單的方法是丟棄二進制文件,並使用流來自己寫入字節。通過這種方式,您可以完全控制輸出數據

另一種方法是創建一個可以使用C++/cli編寫數據的程序集,因此您可以從託管代碼直接與C++兼容。

0

你可以選擇一些選項:

  • 自己編寫它字節一個字節。這可能是最糟糕的選擇。它需要雙方更多的工作(序列化和反序列化)。
  • 使用一些跨平臺的序列化工具,如Protobuf。它有幾乎任何平臺的端口,包括C#(protobuf-net)和C++。它也很容易使用,並且性能非常好。
  • 您可以使用Struct並使用Marshal.PtrToStructure將其轉換爲yo字節數組(如果您需要其他方式,可以使用Marshal.StructureToPtr)。互聯網上有很多例子。如果您可以使用託管CPP,則可以使用同一個對象,以便可以在一個位置更改結構,並且在兩個位置都會更改。
  • 如果使用託管CPP,您可以使用內置的序列化,如BinaryFormatter的...
的[連載在.NET中,反序列化在C++]