Это довольно просто, используя сортировку.
Верх файла
using System.Runtime.InteropServices
Функция
byte[] getBytes(CIFSPacket str) {
int size = Marshal.SizeOf(str);
byte[] arr = new byte[size];
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(str, ptr, true);
Marshal.Copy(ptr, arr, 0, size);
Marshal.FreeHGlobal(ptr);
return arr;
}
И для ее возврата:
CIFSPacket fromBytes(byte[] arr) {
CIFSPacket str = new CIFSPacket();
int size = Marshal.SizeOf(str);
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.Copy(arr, 0, ptr, size);
str = (CIFSPacket)Marshal.PtrToStructure(ptr, str.GetType());
Marshal.FreeHGlobal(ptr);
return str;
}
В вашей структуре вам нужно будет поставить это перед строкой
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string Buffer;
И убедитесь, что SizeConst имеет такую же большую возможную строку.
И вы должны, вероятно, прочитать это: http://msdn.microsoft.com/en-us/library/4ca6d5z7.aspx