谁能告诉我如何在 C# .NET 版本 2 中以直接方式将字节数组放入结构中?就像 C 中熟悉fread
的一样,到目前为止,我在读取字节流和自动填充结构方面没有取得太大成功。unsafe
我已经看到一些实现,其中使用关键字在托管代码中存在指针 hocus-pocus 。
看看这个样本:
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
- 是否不能有一个空的构造函数。
- 实例化结构时,将一块内存(作为字节数组)传入构造函数。
该实现是否足够好,或者是否有更清洁的方法来实现这一目标?
编辑:我不想使用 ISerializable 接口或其实现。我正在尝试读取二进制图像以计算出使用的字段并使用 PE 结构确定其数据。