И никак не найду гибкость, которая была у C/C++. Или ее там нет?
Принимаю из сокета пакет двоичных данных имеющих такую структуру:
struct CDataPacket
{
char DevType; // тип устройства
BYTE InfType; // тип информации
BYTE Length; // длина
BYTE Data[255]; // данные
};
Сразу же сталкиваюсь с тем, что в C# повторить ее нельзя: здесь массивы всегда ссылочного типа. Покопавшись, все-таки нахожу что массив можно сделать fixed. Правда, из-за него одного весь проект приходится делать unsafe.
Но главная проблема дальше. Данные принимаются в массив байт. В Си я создавал указатель типа CDataPacket, указывал им на начало массива и работал с ним. Здесь указателей нет, данные ссылочного типа создаются сразу со "своими" данными, а как быть если данные уже существуют отдельно? Ведь ситуация очень распространенная, двоичные файлы тоже читаются в массив байт, как их интерпретировать как структуры неких дынных? Дальше при обработке этой структуры тоже придется преобразовывать типы — поле Data в зависимости от типа устройства и типа информации интерпретируется как другие структуры, как здесь быть?