Перевод структуры в набор байтов.
От: Nikolkos  
Дата: 20.10.08 17:48
Оценка: 7 (3)
#Имя: FAQ.dotnet.rawserialize
T>Как перевести структуру (последовательно поля) в набор байтов
T>На сегодняшний день я добавляю к таким структурам метод byte[] GetBytes(), который реализую самостоятельно.

Можно так:
        public static byte[] RawSerialize<T>(T anything) where T : struct {
            int rawsize = Marshal.SizeOf(anything);
            byte[] rawdata = new byte[rawsize];
            GCHandle handle = GCHandle.Alloc(rawdata, GCHandleType.Pinned);
            Marshal.StructureToPtr(anything, handle.AddrOfPinnedObject(), false);
            handle.Free();
            return rawdata;
            }


И обратно:

        public static T RawDeserialize<T>(byte[] raw) where T : struct {
            GCHandle handle = GCHandle.Alloc(raw, GCHandleType.Pinned);
            T result = (T)Marshal.PtrToStructure(
                handle.AddrOfPinnedObject(), typeof(T));
            handle.Free();
            return result;
            }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.