Я выполняю эксперимент как часть процесса R & D. Мне нужно иметь возможность устанавливать значения в структуре и извлекать их и устанавливать их как байт [].Скопируйте управляемый массив в неуправляемый массив фиксированного размера и из него
Вот моя структура:
[StructLayout(LayoutKind.Explicit, Size = 17)]
unsafe internal struct MyBuffer
{
[FieldOffset(0)]
internal fixed byte Bytes[17];
[FieldOffset(0)]
internal long L1;
[FieldOffset(8)]
internal long L2;
[FieldOffset(16)]
internal byte B;
}
Установка значений, очевидно, автоматически устанавливается байт []:
MyBuffer test = new MyBuffer();
test.L1 = 100;
test.L2 = 200;
test.B = 150;
Проверка теста в режиме отладки дающий то, что я ожидал.
Что мне нужно следующий образом:
- Чтобы иметь возможность читать неуправляемый фиксированный массив байт в виде 17 байт длиной управляемого массива.
- Для установки неуправляемого массива фиксированного байта из 17-байтового управляемого массива.
ПРИМЕЧАНИЕ:
- Если это вообще возможно, я не хочу использовать маршалинг, как это чувствительная операция времени.
- Я не могу опустить фиксированную директиву, поскольку это вызывает ошибку времени выполнения из-за перекрытия объектов и не-объектов в структуре.
Пожалуйста, не включайте языковой тег в заголовок, если это не имеет смысла без него. Теги служат для этой цели. –
Marshaling - это требование к рок-музыке. У этого вопроса есть обычная проблема с попытками оптимизации, он не говорит, насколько быстрее он должен быть, поэтому мы не можем сказать, какой может быть наиболее подходящий ответ. –
Ганс, если Маршаллинг - это твердое требование, то это ответ. Я сказал: «Если вообще возможно, я не хочу использовать сортировку». Неважно, насколько быстрее альтернатива, так как вы говорите, что альтернативы нет. – IamIC