Маршалинг структур: динамическое управление размером - C#
Формулировка задачи:
Решил изучить как с помощью средств c# передавать структуры. Нашел способы преобразования структур в массив байт с помощью Marashal. Вот код структуры:
Собственно вопрос. Так как мне приходится над переменными типа массив указывать их размер, чтобы можно было преобразовать к массиву байт структуру, то получается у меня структура всегда одного и того же размера. Допустим мне надо передать структуру, в которой я только заполню поле pack_type, следовательно все остальное будет пустым, но так как размеры массивов уже предопределены, я отправлю структуру, как бы полностью забитую, а это не очень выгодно, в плане передачи по сети, чем меньше размер пакета, тем лучше. Можно ли строки типа "[MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]" задавать динамически, во время формирования данных для структуры?
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)] public struct Package { public byte pack_type; public byte con_status; public uint user_id; public byte user_status; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string user_name; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dest_user; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)] public byte[] buffer; }
Решение задачи: «Маршалинг структур: динамическое управление размером»
textual
Листинг программы
pack.packet_version = (short)IPAddress.NetworkToHostOrder(reader.ReadInt16());
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д