问题描述
typedefstructrealprm{/*realparameter*/longprm_val;/*valueofvariable*/longdec_val;/*numberofplacesofdecimals*/}REALPRM;typedefstructiodbpsd{shortdatano;/*parameternumber*/shorttype;/*upperbyte:type*//*lowerbyte:axis*/union{charcdata;/*bit/byteparameter*/shortidata;/*wordparameter*/longldata;/*2-wordparameter*/REALPRMrdata;/*realparameter*/charcdatas[MAX_AXIS];/*bit/byteparameterwithaxis*/shortidatas[MAX_AXIS];/*wordparameterwithaxis*/longldatas[MAX_AXIS];/*2-wordparameterwithaxis*/REALPRMrdatas[MAX_AXIS];/*realparameterwithaxis*/}u;}IODBPSD;/*MAX_AXIS:max.controlledaxes*/请问大家,这种结构体中嵌套联合体的方式怎么在C#中进行转换阿?
解决方案
解决方案二:
解决方案三:
“联合”中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。并且每次只能赋一种值,赋入新值则冲去旧值。你的联合中,最长的成员是REALPRMrdatas[MAX_AXIS];所以结构体structiodbpsd{shortdatano;/*parameternumber*/shorttype;/*upperbyte:type*/REALPRMrdatas[MAX_AXIS];}根据上面两个字段的值,来读取rdatas