如何在c#中方便地表示c数据?
我需要通过以太网将测量数据从嵌入式板发送到用c#开发的PC应用程序,该应用程序将绘制并保存测量数据 电路板中的数据按以下方式格式化:如何在c#中方便地表示c数据?,c#,c,embedded,ethernet,C#,C,Embedded,Ethernet,我需要通过以太网将测量数据从嵌入式板发送到用c#开发的PC应用程序,该应用程序将绘制并保存测量数据 电路板中的数据按以下方式格式化: typedef struct { float current[200]; float ctrl_voltage[200]; float speed; float position; }logData_t; logData_t embedded_data[6]; 我能
typedef struct
{
float current[200];
float ctrl_voltage[200];
float speed;
float position;
}logData_t;
logData_t embedded_data[6];
我能够在字节[]缓冲区中接收c#应用程序中的嵌入式_数据
,问题是,如何将该缓冲区
转换为与上面所示格式类似的格式,以便以一致的方式访问不同的字段
谢谢您的建议。作为C#logData_中的结构,它可以如下所示:
结构日志数据{
固定浮充电流[200];
固定浮动控制电压[200];
浮动速度;
浮动位置;
}
要使用它,您可能必须将数据加载到非托管内存中,您可以得到如下结果:
logData_t*data=stackalloc logData_t[length]代码>
然后使用Marshal.Copy
将原始数据加载到其中
但是,如果您想在C#中使用指针,还必须设置允许不安全代码编译选项
然后,您可以这样访问它:
logData_t*log=data[i];
浮动速度=对数->速度;
这可能对您有用:您可以尝试一下,而不是发送严重依赖于编译器和体系结构的二进制结构数组,我建议将数据转换为定义良好的数据交换格式,例如文本格式。@Bodo您的意思是将值2.61转换为ASCII“2.61”吗并发送字符串表示?@Paolomatachini将浮点数转换为字符串是一个选项,也是整个任务的一部分。您还必须定义如何分隔数字以及数字如何对应于结构字段或数组元素。您可以添加标记/键或定义固定格式。如果二进制数据交换格式定义良好且独立于您的平台,那么它也是可能的。也谢谢你的建议,我试过了,效果很好。作为一名C#开发人员,我需要问:使用不安全代码的缺点是什么?基本上,不安全代码只允许使用指针。但如果使用指针,则几乎总是使用非托管内存,使用非托管内存很容易导致内存泄漏。但是stackalloc相当节省,因为当方法退出时,内存会自动释放