有人能告诉我如何在C# .NET 2版本中以直接方式将字节数组转换为结构体吗?就像在C语言中熟悉的fread
一样,到目前为止我读取字节流并自动填充结构体并没有取得太大成功。我看到一些实现中使用了指针操作,通过使用unsafe
关键字来进行托管代码。
请查看这个示例:
public unsafe struct foobarStruct{
/* fields here... */
public foobarStruct(int nFakeArgs){
/* Initialize the fields... */
}
public foobarStruct(byte[] data) : this(0) {
unsafe {
GCHandle hByteData = GCHandle.Alloc(data, GCHandleType.Pinned);
IntPtr pByteData = hByteData.AddrOfPinnedObject();
this = (foobarStruct)Marshal.PtrToStructure(pByteData, this.GetType());
hByteData.Free();
}
}
}
我在
foobarStruct
中有两个构造函数的原因是:
- 不能有一个空的构造函数。
- 在实例化结构时,将一块内存(作为字节数组)传递给构造函数。
fread
函数读取到一个结构体中是一个非常糟糕的想法。 - Gregory Pakosz