首页 > 其他 > 详细

自定义序列化技术2:变长数组的实现

时间:2014-01-16 00:00:31      阅读:536      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
 1 //一维
 2 #include<iostream>
 3 #include<vector>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8  int len;
 9  cin>>len;
10  vector<int> array(len);//声明变长数组
11 
12  for(int i=0;i<len;i++)
13  {
14   array[i]=i;
15   cout<<array[i]<<"\t";
16  }
17  return 0;
18 }
19 //二维
20 #include <iostream>
21 #include <iomanip>
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: "<<endl;
30  cin >> num1 >> num2;
31 
32  //为二维数组开辟空间
33  int **p = new int*[num1];
34  for(int i=0; i<num1; ++i)
35   p[i] = new int[num2];
36 
37  for(int j=0;j<num1;j++)
38  {
39   for(int k=0;k<num2;k++)
40   {
41    p[j][k]=(j+1)*(k+1);
42    cout<<setw(6)<<p[j][k]<<:<<setw(8)<<&p[j][k];
43   }
44   cout<<endl;
45  }
46 
47  //释放二维数组占用的空间
48  for(int m=0;m<num1;m++)
49   delete[] p[m];
50  delete[] p;
51 
52  return 0;
53 }
bubuko.com,布布扣

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

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

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

bubuko.com,布布扣
1 char str[MAXSIZE+1];
2   memset(&str,0,sizeof(str));
3   memcpy(&str,(char*)&matrix,sizeof(str));//将matrix里面的值,赋值给str,长度sizeof。与上面刚好相反。
bubuko.com,布布扣

方法二:

bubuko.com,布布扣
1 /***************************UDP发送之前,将结构体转换为字符数组******************************/
2   uint len = obs*sizeof(Point) + 2; 
3   vector<char> str(len);       //声明可变数组
4   memset(&str,0,sizeof(str)); //初始化,赋值为0
5   memcpy(&str,(char*)&matrix,len);//从结构体matrix里面截取部分长度,并赋值给str数组。
bubuko.com,布布扣
1  iSend=sendto(sClient,(char*)&str,len,0,(struct sockaddr*)&ser,iLen);//udp发送端函数

 

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

自定义序列化技术2:变长数组的实现

原文:http://www.cnblogs.com/zhuxuekui/p/3516371.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!