关于指针的问题(各位用过opnet的大大们请看过来!)

fengyang0315 2012-11-12 11:11:20
学习opnet不久,现在做一个源模块,想着在自定义好格式的数据包给一个长度为2048字节的数据域赋值,语句如下:
int Len = 2048;
unsigned char Data[2048];
pkptr = op_pk_create_fmt("pkt_fmt");
op_pk_nfd_set(pkptr,"DataLength",LEN);
for(int i=0;i<2048;i++)
{
Data[i] = i & 0xff;
op_pk_nfd_set (pkptr,"Data", Data[i] );
}
............

这样运行完发现,数据域"Data"中的所有字节都被Data[2047]覆盖了,貌似是因为指针pkptr是指向包的,不能移动。而数据字节很多,又不能用具体数值逐一字节进行赋值
所以,想请问各位前辈,这种情况我应该怎么做呢?
...全文
696 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyang0315 2012-11-14
  • 打赏
  • 举报
回复
经过几天的挣扎,最终觉得用数组赋值的方式不太可行,于是改用无格式包来充当这个中间角色。
enc_pkt=op_pk_create(2048*8);
for(i=0;i<2048;i++)op_pk_fd_set(enc_pkt,i,OPC_FIELD_TYPE_INTEGER,i&0xff,8);
op_pk_nfd_set_pkt(pkptr,"Data",enc_pkt);
........
可以将无格式包放入自定义好的格式包域中,但是在此之前,需要在包编辑器中将"Data"域的属性类型改为packet, size改为inherited.
fengyang0315 2012-11-14
  • 打赏
  • 举报
回复
经过几天的挣扎,最终觉得用数组赋值的方式不太可行,于是改用无格式包来充当这个中间角色。
enc_pkt=op_pk_create(2048*8);
for(i=0;i<2048;i++)op_pk_fd_set(enc_pkt,i,OPC_FIELD_TYPE_INTEGER,i&0xff,8);
op_pk_nfd_set_pkt(pkptr,"Data",enc_pkt);
........
可以将无格式包放入自定义好的格式包域中,但是在此之前,需要在包编辑器中将"Data"域的属性类型改为packet, size改为inherited.
fengyang0315 2012-11-12
  • 打赏
  • 举报
回复
我按照您说的方法试了一下,依然不行,在"Data"域中仅有第一个字节(Data[0])是正确的,后面全都是未经初始化的乱码。
op_pk_nfd(pkptr,"Data",Data);

op_pk_nfd(pkptr,"Data",*Data);

我都试过了,都不行啊

您说的文件指针偏移的方法具体应该怎么做呢?
七擒关羽 2012-11-12
  • 打赏
  • 举报
回复
或者修改如下: for(int i=0;i<2048;i++) { Data[i] = i & 0xff; } op_pk_nfd_set (pkptr,"Data", Data[0] );
七擒关羽 2012-11-12
  • 打赏
  • 举报
回复
。。。你这个是对文件赋值,没有做文件偏移。每次赋值后返回文件指针指向文件末端来解决。
fengyang0315 2012-11-12
  • 打赏
  • 举报
回复
这种方法也试了,不行,在第二次循环时直接报错"Packet pointer references unowned packet"
对此,我的理解是,op_pk_nfd_set( pkptr,"Data", Data[i] ),其中pkptr指向一个包,这个函数就是将 Data[i]放到名为" Data "的数据域中去。当pkptr+i之后,系统会将此认为是另一个数据包,而不能在pkptr+i所对应的指针处找到名为" Data "的数据域,因而报错。
我也觉得这应该是函数本身的功能局限性,但是不知道还有什么更合适的函数来完成这一功能,希望前辈们不吝赐教
七擒关羽 2012-11-12
  • 打赏
  • 举报
回复
由于具体 没看过op_pk_nfd这函数的具体功能,只能得知这个是把值写文件的函数,是单个值。 1、估计是函数问题,是否可以修改成传指针进去 2、写完一个值后,返回的文件指针指向的内容末端,或偏移值 如果这样可以这样修改: for(int i=0;i<2048;i++) { Data[i] = i & 0xff; op_pk_nfd_set (pkptr+i,"Data", Data[i] ); //作指针偏移 }

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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