关于结构体嵌套中的数组,该怎么处理

关于结构体嵌套中的数组
看了几个小时了,还是没弄明白,现在把相关的定义都贴出来,请各位帮忙

[code=C/C++][/code]#define ECCSMSG8 (*((struct eccsmsg8 *)(CANDATA[ECCSMSG8_DEF].DATA)))

#define ECCSMSG8_DEF 14

struct candata
{
struct dataflg FLG;
uchar8 COUNT;
uchar8 DATA[8];
};

#define CANDATA ((struct candata *)&vCANDATA_bios)

uchar8 CANDATA_bios[37][10] ;

struct eccsmsg8
{
uchar8 DTCCODE_L; /* DT0 */
uchar8 DTCCODE_H; /* DT1 */
uchar8 ENSTNG :1; /* DT2 bit7 */
uchar8 ECMNG :1; /* DT2 bit6 */
uchar8 ETCNG :1; /* DT2 bit5 */
uchar8 FCNG :1; /* DT2 bit4 */
uchar8 CANNGF :1; /* DT2 bit3 */
uchar8 :1; /* DT2 bit2 */
uchar8 ECSMSG8C :2; /* DT2 bit1-0 */
uchar8 :8; /* DT3 */ /* [192]M */
uchar8 :8; /* DT4 */ /* [192]M */
uchar8 :6; /* DT5 bit7-2 */ /* [192]M */
uchar8 ISSAP :1; /* DT5 bit1 */ /* [192]M */
uchar8 SPTMD_LMP :1; /* DT5 bit0 */ /* [192]M */
uchar8 IDSTSTB :1; /* DT6 bit7 */ /* [192]M */
uchar8 IDSTSTS :1; /* DT6 bit6 */ /* [192]M */
uchar8 ISACT :1; /* DT6 bit5 */ /* [192]M */
uchar8 ISBRKREQ :1; /* DT6 bit4 */ /* [192]M */
uchar8 ISINDMD :2; /* DT6 bit3-2 */ /* [192]M */
uchar8 ISMSKSW :1; /* DT6 bit1 */ /* [192]M */
uchar8 CHRGLREQ :1; /* DT6 bit0 */ /* [192]M */
uchar8 SHARE_ECO_BOOST :8; /* DT7 */ /* [206]M */
};


vCANDATA_bios[14][9]即ECCSMSG8.SHARE_ECO_BOOST,是怎么得来的?

------解决方案--------------------
恭喜终于悟了
------解决方案--------------------
C/C++ code
#define ECCSMSG8 (*((struct eccsmsg8 *)(CANDATA[ECCSMSG8_DEF].DATA)))//这里是将ECCSMSG8定义地址CANDATA[14].DATA类型为eccsmsg8的结构

#define ECCSMSG8_DEF 14

struct candata
{
    struct dataflg FLG;//这个结构不知道是什么样的,不过如果套你现在的结果这个结构应该是占一个byte
    uchar8 COUNT;
    uchar8 DATA[8];
};

#define CANDATA ((struct candata *)&vCANDATA_bios)//将CANDATA定义为地址是vCANDATA_bios类型为candata的结构

uchar8 vCANDATA_bios[37][10] ;//这里是不是打错了少了个字母v我加上了

struct eccsmsg8//这个结构就是一个位定义的结构总共占了8个byte
{
    uchar8 DTCCODE_L; /* DT0 */
    uchar8 DTCCODE_H; /* DT1 */
    uchar8 ENSTNG :1; /* DT2 bit7 */
    uchar8 ECMNG :1; /* DT2 bit6 */
    uchar8 ETCNG :1; /* DT2 bit5 */
    uchar8 FCNG :1; /* DT2 bit4 */
    uchar8 CANNGF :1; /* DT2 bit3 */
uchar8 :1; /* DT2 bit2 */
        uchar8 ECSMSG8C :2; /* DT2 bit1-0 */
uchar8 :8; /* DT3 */ /* [192]M */
uchar8 :8; /* DT4 */ /* [192]M */
uchar8 :6; /* DT5 bit7-2 */ /* [192]M */
        uchar8 ISSAP :1; /* DT5 bit1 */ /* [192]M */
        uchar8 SPTMD_LMP :1; /* DT5 bit0 */ /* [192]M */
        uchar8 IDSTSTB :1; /* DT6 bit7 */ /* [192]M */
        uchar8 IDSTSTS :1; /* DT6 bit6 */ /* [192]M */
        uchar8 ISACT :1; /* DT6 bit5 */ /* [192]M */
        uchar8 ISBRKREQ :1; /* DT6 bit4 */ /* [192]M */
        uchar8 ISINDMD :2; /* DT6 bit3-2 */ /* [192]M */
        uchar8 ISMSKSW :1; /* DT6 bit1 */ /* [192]M */
        uchar8 CHRGLREQ :1; /* DT6 bit0 */ /* [192]M */
        uchar8 SHARE_ECO_BOOST :8; /* DT7 */ /* [206]M */
}

------解决方案--------------------
楼主,我收回我的话额,其实我不是很懂……可否给我讲讲这个问题啊。我有两个疑问,第一,关于强制转换,它把CANDATA_bios这个二维数组转换成struct candata结构体型的,由于二维数组的空间比这个结构体大,它转换以后,那是不是把所有的二维数组空间都转换成结构体啊,还是只转换一个就行?第二,转换以后,原先的二维数组和转换之后的空间怎么对应的呢?谢谢……
------解决方案--------------------
遇到宏多的。。。预编译工具是个好东西。。。