博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义序列化技术2:变长数组的实现
阅读量:7069 次
发布时间:2019-06-28

本文共 1642 字,大约阅读时间需要 5 分钟。

1 //一维 2 #include
3 #include
4 using namespace std; 5 6 int main() 7 { 8 int len; 9 cin>>len;10 vector
array(len);//声明变长数组11 12 for(int i=0;i
21 #include
22 using namespace std;23 24 int main()25 {26 int num1,//行数27 num2;//列数28 29 cout<<"Please enter the number for row and column: "<
> num1 >> num2;31 32 //为二维数组开辟空间33 int **p = new int*[num1];34 for(int i=0; i

调用C++里面的vector 容器,实现变长数组。

why?  因为在用UDP进行数据通信的时候,我不可能把所有的点都发给决策组,那我就需要截取结构体里面的东西,该怎么截取,情况下面函数:

方法一:(通过声明常量数组实现,截取部分)

此种方法从理论上来讲与方法二有异曲同工之妙之妙,我们也也可以获得

uint len = obs*sizeof(Point) + 2; 也就是matrix里面的大小。这样我们就没必要用sizeof(str);多此一举。 但相比较方法二,此方法浪费空间比方法二要多,没有方法二灵活。
1 char str[MAXSIZE+1];
uint len = obs*sizeof(Point) + 2;
2 memset(&str,0,sizeof(str)); 3 memcpy(&str,(char*)&matrix,len);//将matrix里面的值,赋值给str,长度sizeof。与上面刚好相反。

方法二:

1 /***************************UDP发送之前,将结构体转换为字符数组******************************/2   uint len = obs*sizeof(Point) + 2; 3   vector
str(len); //声明可变数组 ,对于vector来说,vector本身就已经初始化了。不用在用memset()在初始化一遍了。4 // memset(&str,0,sizeof(str)); //初始化,赋值为0 5 memcpy(&str,(char*)&matrix,len);//从结构体matrix里面截取部分长度,并赋值给str数组。
1  iSend=sendto(sClient,(char*)&str,len,0,(struct sockaddr*)&ser,iLen);//udp发送端函数

 

至此,通过稀疏矩阵,将前方一个大的地图中有障碍物的坐标以及类型,通过稀疏矩阵编码,实际上就是一个结构体数组,然后将此结构体数组截取部分字段变为字符数组,并通过UDP传送过去。(注意:UPD通信,无所谓结构体或者结构体数组,其实直接强制类型转换即可。你可以结构体里面套结构体,但,最好标识非零点的个数,这样容易解包。然后,我们就可以通过所谓的强制类型转换即可。(char *)&buffer,buffer为一个字节数组,或者结构体,或者二维数组名,一维数组名都可以。

 

转载于:https://www.cnblogs.com/zhuxuekui/p/3516371.html

你可能感兴趣的文章
kernel(一) interrupts
查看>>
SQLite数据库约束详解
查看>>
form submit不进入action方法问题
查看>>
c#语言中 (int)、int.Parse()、int.TryParse、Convert.ToInt32的区别
查看>>
kbmMWClientQuery 排序问题
查看>>
WPF中的容器控件——WrapPanel
查看>>
初学CI源码
查看>>
获取数据库内容一
查看>>
移动端知识梳理
查看>>
在CentOS 7中部署Tomcat
查看>>
滚动时div的背景图片随之滚动
查看>>
配置虚拟交换机vSwitch
查看>>
比特币代码分析11 比特币存储机制
查看>>
域名解析中遇到的一些问题
查看>>
Golang 写一个端口扫描器
查看>>
Greenplum 在Linux下的安装(centOS,RedHat)
查看>>
elk的备份与恢复
查看>>
bzoj 3611: [Heoi2014]大工程
查看>>
Oracle中清除注册表
查看>>
2015GCT顺利结束
查看>>