数据类型,结构体(高手请进)

sandy1983 2009-07-30 05:32:04
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包给函数,然后将包内的数据分别赋值给这些结构成员)该如何做?


...全文
101 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qian_longN1 2009-07-30
  • 打赏
  • 举报
回复
mark
dl551djs 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sandy1983 的回复:]
定义成数组如何赋值呢?赋常量 CHAR值吗?
[/Quote]
说清楚点啊!
是问表示成结构体后怎么赋值吗?
sandy1983 2009-07-30
  • 打赏
  • 举报
回复
定义成数组如何赋值呢?赋常量 CHAR值吗?
chehw 2009-07-30
  • 打赏
  • 举报
回复
PACKAGE1 pocket;
memcpy(&pocket, p, sizeof(pocket));


不管什么类型, 都是二进制数据, 只有发送方和接收方的数据内容一致, 可以进行强制类型转换.

至于HSTR应定义成WORD还是BYTE [2], 视程序的需要而定, 看哪种使用起来更方便. 我上面结构体的定义只是个示例.
sandy1983 2009-07-30
  • 打赏
  • 举报
回复

//定义结构体

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变量不就行了吗?为何定义成数组呢?


dl551djs 2009-07-30
  • 打赏
  • 举报
回复
看一下,memcpy这个函数的用法,是传递结构非常好的函数。
在于底层的pocket数据包对我来说太神秘了--------------------------没什么的,和函数传递差不多,看你写的内容,我猜好像是做网络传输吧,这个去找点例子看看吧。 传输主要用到的语句就memcpy,挺好的。
oyljerry 2009-07-30
  • 打赏
  • 举报
回复
底层的包到你的程序后,已经是字符串了,你可以把对应的一个结构体的字符串直接类型转换成结构体

char *p;
假设p为接收到的字符串
PACKAGE1* pack = (PACKAGE1*)p;
sandy1983 2009-07-30
  • 打赏
  • 举报
回复
如果能简单示范个这种函数的样子给我,并稍加说明就更好了
sandy1983 2009-07-30
  • 打赏
  • 举报
回复
非常感谢,这个完全没涉及过。请问第二个问题该如何处理呢?

自定义一个函数,一个pocket包作参数传进来,然后把包内数据分别赋值给struct里的每个成员。是不是所有pocket包里的数据都是二进制的呢?如果是二进制的该如何传递、转化、并赋值呢?我如果想在网上下载一个pocket包来测试一下赋值是否成功,那里可以载得到?我清楚我的盲点在于底层的pocket数据包对我来说太神秘了
chehw 2009-07-30
  • 打赏
  • 举报
回复
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,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧