field                             length(bytes)DRCBuffer                           1byte*8
BestASPSinbuffer                    2byte*16
RKtRevdFlag[bit7]                  //      
PASTate[bit6]                      // 1byte//行的内容合一个字节长度
BestASPPredicted[bit3:0]          //
ASPFilteredSINR                    2bytes*6
PilotPNASP                         2bytes*6
RPC                                int 16 *6
PERInst                            2
PETSequence                        2
HSTR                               2
PRCCellindex                       1byte*6
两个问题:
请教高手,
1、将以上数据定义到一个结构内,如何写?数据类型还有定义成什么成员?
2、并供函数调用(传一个pocket包给函数,然后将包内的数据分别赋值给这些结构成员)该如何做?

解决方案 »

  1.   

    typedef struct tagPACKAGE1
    {
    BYTE DRCBuffer[8];
    WORD BestASPSinbuffer[16];
    BYTE RKtRevdFlag:7; //[bit7]                  //      
    BYTE PASTate:6;     //[bit6]                      // 1byte//行的内容合一个字节长度 
    BYTE BestASPPredicted:3 //[bit3:0]          // 
    WORD ASPFilteredSINR[6]; //                    2bytes*6 
    WORD PilotPNASP[6]; //                        2bytes*6 
    short RPC[6]; //                                int 16 *6 
    BYTE PERInst[2]; //                            2 
    BYTE PETSequence[2];//                        2 
    BYTE HSTR[2]; //                              2 
    BYTE PRCCellindex[6]; //                      1byte*6 
    }PACKAGE1;
      

  2.   

    非常感谢,这个完全没涉及过。请问第二个问题该如何处理呢?自定义一个函数,一个pocket包作参数传进来,然后把包内数据分别赋值给struct里的每个成员。是不是所有pocket包里的数据都是二进制的呢?如果是二进制的该如何传递、转化、并赋值呢?我如果想在网上下载一个pocket包来测试一下赋值是否成功,那里可以载得到?我清楚我的盲点在于底层的pocket数据包对我来说太神秘了
      

  3.   

    底层的包到你的程序后,已经是字符串了,你可以把对应的一个结构体的字符串直接类型转换成结构体char *p;
    假设p为接收到的字符串
    PACKAGE1* pack = (PACKAGE1*)p;
      

  4.   

    看一下,memcpy这个函数的用法,是传递结构非常好的函数。
    在于底层的pocket数据包对我来说太神秘了--------------------------没什么的,和函数传递差不多,看你写的内容,我猜好像是做网络传输吧,这个去找点例子看看吧。 传输主要用到的语句就memcpy,挺好的。
      

  5.   


    //定义结构体typedef struct tagPACKAGE1 

    BYTE DRCBuffer[8]; 
    WORD BestASPSinbuffer[16]; 
    BYTE RKtRevdFlag:7; //[bit7]                  //      
    BYTE PASTate:6;    //[bit6]                      // 1byte//行的内容合一个字节长度 
    BYTE BestASPPredicted:3 //[bit3:0]          // 
    WORD ASPFilteredSINR[6]; //                    2bytes*6 
    WORD PilotPNASP[6]; //                        2bytes*6 
    short RPC[6]; //                                int 16 *6 
    BYTE PERInst[2]; //                            2 
    BYTE PETSequence[2];//                        2 
    BYTE HSTR[2]; //                              2 
    BYTE PRCCellindex[6]; //                      1byte*6 
    }PACKAGE1;
    //定义接受函数
    void Receivedpocket(char *p){
    PACKAGE1.//本来还想做点运算的,看到2楼的都定义成数组让我无从下手了
    strcpy(PACKAGE1.DRCBuffer,const p)//这样赋值行不行,该怎么赋值?
    }另外,既然说pocket传进程序后是字符串了,那不是存在BYTE和char类型赋值不匹配的问题吗?
    已经说明了HSTR是2bytes 长度了,直接定义成WORD变量不就行了吗?为何定义成数组呢?
      

  6.   

    PACKAGE1 pocket;
    memcpy(&pocket, p, sizeof(pocket));
    不管什么类型, 都是二进制数据, 只有发送方和接收方的数据内容一致, 可以进行强制类型转换.至于HSTR应定义成WORD还是BYTE [2], 视程序的需要而定, 看哪种使用起来更方便. 我上面结构体的定义只是个示例. 
      

  7.   

    定义成数组如何赋值呢?赋常量 CHAR值吗?