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包给函数,然后将包内的数据分别赋值给这些结构成员)该如何做?
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包给函数,然后将包内的数据分别赋值给这些结构成员)该如何做?
{
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;
假设p为接收到的字符串
PACKAGE1* pack = (PACKAGE1*)p;
在于底层的pocket数据包对我来说太神秘了--------------------------没什么的,和函数传递差不多,看你写的内容,我猜好像是做网络传输吧,这个去找点例子看看吧。 传输主要用到的语句就memcpy,挺好的。
//定义结构体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变量不就行了吗?为何定义成数组呢?
memcpy(&pocket, p, sizeof(pocket));
不管什么类型, 都是二进制数据, 只有发送方和接收方的数据内容一致, 可以进行强制类型转换.至于HSTR应定义成WORD还是BYTE [2], 视程序的需要而定, 看哪种使用起来更方便. 我上面结构体的定义只是个示例.