нужно для перестановки байт, т.к. устройство передает float в нестандартном виде.
также передается массив из 64 байт, который нужно разобрать, делалось таким способом:
Можно воспользоваться атрибутом StructLayout, сказав LayoutKind.Explicit и явно указав размер. Далее, на члены навесить атрибут FieldOffset.
Для описания массивов удобно пользоваться синтаксисом fixed arrays (введенным во FW2.0). Если пишется под FW1.1, то придется объявить лишь первый элемент массива, а доступ к произвольному элементу получать через адресную арифметику.
Здравствуйте, Mab, Вы писали:
Mab>Здравствуйте, Rius, Вы писали:
Mab>Можно воспользоваться атрибутом StructLayout, сказав LayoutKind.Explicit и явно указав размер. Далее, на члены навесить атрибут FieldOffset.
Mab>Для описания массивов удобно пользоваться синтаксисом fixed arrays (введенным во FW2.0). Если пишется под FW1.1, то придется объявить лишь первый элемент массива, а доступ к произвольному элементу получать через адресную арифметику.
Mab>P.S. Все это unsafe, конечно.
Здравствуйте, Mab, Вы писали:
Mab>Можно воспользоваться атрибутом StructLayout, сказав LayoutKind.Explicit и явно указав размер. Далее, на члены навесить атрибут FieldOffset.
Mab>Для описания массивов удобно пользоваться синтаксисом fixed arrays (введенным во FW2.0). Если пишется под FW1.1, то придется объявить лишь первый элемент массива, а доступ к произвольному элементу получать через адресную арифметику.
Mab>P.S. Все это unsafe, конечно.
Cпасибо большое за ответ, я его нашёл поиском. Меня интересует тот-же вопрос. Сделать простой union float / int благодаря вашему совету у меня получилось:
[StructLayout(LayoutKind.Explicit)]
struct TestUnion
{
[FieldOffset(0)]
public float fltval;
[FieldOffset(0)]
public System.Int16 intval;
}
он работает,
а вот ввести в union массив не выходит. Попробовал вот такое:
[StructLayout(LayoutKind.Explicit)]
struct TestUnion1
{
[FieldOffset(0)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public byte[] fixedArray;
[FieldOffset(0)]
public float fltval;
}
но вылетает ексепшн.
Найти что-то про fixed arrays в FW2.0 тоже почему-то не получается..
Спасибо большое заранее за любую подсказку или ссылку по этой теме.