Как удобно представлять c данные в c#? - PullRequest
0 голосов
/ 13 марта 2020

Мне нужно отправить измерения через ethe rnet со встроенной платы в приложение P C, разработанное в c#, которое построит и сохранит его.

Данные на плате отформатированы в следующим образом:

    typedef struct
    {
        float current[200];
        float ctrl_voltage[200];
        float speed;
        float position;
    }logData_t;

    logData_t embedded_data[6];

Я могу получить embedded_data в приложении c# в byte[] buffer, вопрос в том, как мне преобразовать этот buffer в формат, аналогичный показанный выше, чтобы я мог последовательно обращаться к различным полям?

Спасибо за предложения.

1 Ответ

0 голосов
/ 13 марта 2020

как структура в C# logData_t может выглядеть следующим образом:

struct logData_t {
  fixed float current[200];
  fixed float ctrl_voltage[200];
  float speed;
  float position;
}

, чтобы использовать его, вам, вероятно, придется загрузить данные в неуправляемую память, которую вы получите, как:

logData_t* data = stackalloc logData_t[length];

, а затем используйте Marshal.Copy для загрузки в них необработанных данных

, но если вы хотите использовать указатели в C#, вам также нужно установить разрешить небезопасный код параметр компиляции

, после чего вы можете получить к нему доступ следующим образом:

logData_t* log = data[i];
float speed = log->speed;
...