【发布时间】:2012-03-10 04:37:58
【问题描述】:
MFC CArray 已序列化并保存到数据库。我需要将这些数据读入 C# 项目。我能够从数据库中以 byte[] 的形式检索数据。然后我将 byte[] 写入 MemoryStream。现在我需要从 MemoryStream 中读取数据。
以前有人显然已经解决了这个问题,但没有写出他们的解决方案。
http://social.msdn.microsoft.com/Forums/eu/csharpgeneral/thread/17393adc-1f1e-4e12-8975-527f42e5393e
我遵循这些项目来尝试解决问题。
http://www.codeproject.com/Articles/32741/Implementing-MFC-Style-Serialization-in-NET-Part-1
http://www.codeproject.com/Articles/32742/Implementing-MFC-Style-Serialization-in-NET-Part-2
byte[] 中的第一件事是数组的大小,我可以使用 binaryReader.readInt32() 来检索它。但是,我似乎无法取回浮点值。如果我尝试 binaryReader.readSingle() 或
public void Read(out float d) {
byte[] bytes = new byte[4];
reader.Read(bytes, m_Index, 4);
d = BitConverter.ToSingle(bytes, 0);
}
我没有取回正确的数据。我错过了什么?
EDIT这是序列化数据的C++代码
typedef CArray<float, float> FloatArray;
FloatArray floatArray;
// fill floatArray
CSharedFile memoryFile(GMEM_MOVEABLE | GMEM_ZEROINIT);
CArchive ar(&memoryFile, CArchive::store);
floatArray.Serialize(ar);
ar.Close();
编辑 2
通过向后阅读,我能够得到所有的浮点数,并且还能够确定 CArray 的大小是 byte[2] 或 Int16。有谁知道是否总是这样?
【问题讨论】:
-
例如,您确定数据保存为单而不是双吗?
-
查看我的编辑,了解如何在 C++ 代码中序列化数据。谢谢!
标签: c# .net arrays serialization mfc