Запись определенного формата сигнала
Есть определенный формат сигнала .adc, нужно представить заголовок этого файла в реализации c#, вот пример части этого формата в бинарном представлении:
флаги................. long (DWORD) - 4 байта
младший бит:
целочисленные отсчеты - 00000000H
отсчеты с плавающей точкой - 00000001H
первый бит:
отсчеты комплексные - 00000002H
отсчеты некомплексные - 00000000H
резерв заголовка...... - 8 байт
желательно заполнить нулями
отсчеты - (массив переменной длины)
Некомплексные отсчеты:
целочисленные - shortint* - 2N байт
с плавающей точкой - float* - 4N байт
Комплексные отсчеты:
Записаны подряд пары вида (реальная,мнимая) части
целочисленные - shortint* - 4N байт
если разрядность АЦП выше 16, то целочисленные отсчеты
представлены следующим образом:
- int* - 8N байт
с плавающей точкой - float* - 8N байт
Кто-нибудь может помочь реализовать(привести пример), либо же подсказать где можно прочитать по этому поводу?
Ответы (1 шт):
Создайте структуру и энумератор флагов
// структуру и энумератор расположите снаружи класса, просто в неймспейсе
public enum HeaderFlag : long
{
Flag1 = 1,
Flag2 = 2,
Flag3 = 4,
Flag4 = 8
}
public struct Header
{
[Flags]
public HeaderFlag Flags { get; set; }
public uint CountersInt { get; set; }
public float CountersFloat { get; set; }
// и так далее
}
Затем при считайте заголовок в массив байт byte[] и разберите поток байт в цикле присваивая значения полей
byte[] headerArray = ...;
Header header = new Header();
byte[] temp;
temp = headerArray.Take(4).ToArray();
header.Flags = ...;
temp = headerArray.Skip(4).Take(4).ToArray();
header.CountersInt = ...;
}
Как преобразовывать массив байт в числа, можно посмотреть здесь.
Наверно еще можно попробовать использовать маршалинг.