利用MFC里面格式化函数也可以实现可变长度的问题

直接粘代码:

   1:      CString str1;  //定义两个MFC里面的CString里面的字符串
   2:      CString str2;
   3:      str1.Format("(%d)",matrix.Num);   //将str1格式化为此种结构,这句话等于 str1 = “变量”。用他来将某个数据类型转换为字符串类型。
//和那种 IntToString()有几分相似。
   4:      str2 = str2 + str1; 
   5:      for(int i = 0; i < obs ;i++)
   6:      {
   7:          str1.Format("(%d,%d)",matrix.point[i].x,matrix.point[i].y);
   8:          str2 = str2 + str1;           //将str1连接到str2的后面。 此中的  +   为连接符。
   9:      }
  10:      //str2 = str2 + "end";
         //首先这个GetBuffer主要用来把CString对象的字符串转c类型的字符串用的,CString对象中有一个缓冲区,GetBuffer返回的应该是它的一份拷贝,而你需要为这份拷贝设置一个最小长度。
  11:      string str_war(str2.GetBuffer(str2.GetLength())); //将MFC里面的CString字符串转为C语言里面的字符串。string  str_war(),这个是定义并赋值的意思。 注意这两者的定义,CString str1,str2;   一个是string  str_war();这个也是声明并定义的意思。
  12:      char* buf=(char*)malloc(10000);   //buf是指针,但我们可以指定其大小。    
  13:      memset(buf,0,10000);            //开辟空间,赋值为0.这两句其实就是定义了一个字符型数组。
  14:      memcpy(buf,str_war.c_str(),str_war.size()); //c_str()是string类的一个成员函数, 返回常量char *类型的C风格字符串。其实按这种方法也可以实现变长的问题。   buf定义了很大,但我们并没有将它全部发送过去。这个一定要清楚明白,下面sendto函数中会有体现。
 
下面是udp发送函数 iSend=sendto(sClient,buf,str_war.size(),0,(struct sockaddr*)&ser,iLen);//在这里我们可以指定buf的长度,这个很重要。 UDP接收端,收到的数据如下图所示: 第一个表示非零点的个数。其他的表示各个点的x与y坐标。

image

原文地址:https://www.cnblogs.com/zhuxuekui/p/3517727.html