Может ли кто-нибудь сказать мне, как получить массив байтов в структуру прямым способом в C # .NET версии 2? Подобно знакомому fread, найденному в C, до сих пор я не добился большого успеха в чтении потока байтов и автоматическом заполнении структуры. Я видел некоторые реализации, в которых в управляемом коде присутствует фокус-покус указателя с использованием ключевого слова 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
- Разве не может быть пустого конструктора.
- Передайте блок памяти (как массив байтов) в конструктор при создании экземпляра структуры.
Достаточно ли хороша эта реализация или есть более чистый способ добиться этого?
Изменить: я не хочу использовать интерфейс ISerializable или его реализацию. Я пытаюсь прочитать двоичное изображение, чтобы определить используемые поля и определить его данные с помощью структур PE.
freadвstructиз-за соображений заполнения и выравнивания - person Gregory Pakosz   schedule 20.12.2009