我尝试将结构写入二进制文件,但无法正确读取它们。
这是我的结构。它具有动态数量的“值”。如果值的数量为 3,则 GetSize() 将返回 8 + (8*3) = 32
[StructLayout (LayoutKind.Sequential)]
public struct Sample
{
public long timestamp;
public double[] values;
public int GetSize()
{
return sizeof(long) + sizeof(double) * values.Length;
}
}
首先,我通过以下方式将结构转换为字节:
public static byte[] SampleToBytes(Sample samp)
{
int size = samp.GetSize();
byte[] arr = new byte[size];
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(samp, ptr, true);
Marshal.Copy(ptr, arr, 0, size);
Marshal.FreeHGlobal(ptr);
return arr;
}
然后,我使用 BinaryWriter 写入字节,然后退出。当我必须再次运行程序并读取我保存的文件时。我使用 BinaryReader。我从文件中获取每 32 个字节,并使用以下命令将每个 32 字节数组转换回结构:
public static Sample BytesToSample(byte[] arr)
{
Sample samp = new Sample();
IntPtr ptr = Marshal.AllocHGlobal(32);
Marshal.Copy(arr, 0, ptr, 32);
samp = (Sample)Marshal.PtrToStructure(ptr, samp.GetType());
Marshal.FreeHGlobal(ptr);
return samp;
}
但是,在 PtrToStructure() 处会发生 SafeArrayTypeMismatchException。谁能告诉我我做错了什么?
谢谢。