星空网 > 软件开发 > 操作系统

iOS IM开发准备工作(五)iOS中的struct怎么处理

  iOS中需要处理结构体的机会应该不多:Blueteeth or socket and so on。。。

  不过,有一天你还是会遇到的。

定长结构体

  所谓定长的结构体是,结构体内每一个字段都规定了字节长度。如int、long、double、char[32]等等。下面是一个定长结构体的例子。

typedef struct tagInfo{  int nFace;  long cmd;  char sNickName[60];  char sAccountNo[60];}T_INFO,*PT_INFO;

  个人觉得,结构体是一段有序的二进制文本。也就是它的每一个字段都是按顺序排列的。

  // 赋值  tagInfo * tinfo;  tinfo->nFace = 0;  memcpy(tinfo->sAccountNo, [@"xxx" UTF8String], 60);  memcpy(tinfo->sNickName, [@"xxx" UTF8String], 60);  tinfo->cmd = 10;

  // 处理成二进制 用来发送  NSData * sendData = [[NSData alloc]initWithBytes:tinfo length:sizeof(tinfo)];

  上面两段代码可以看出,定长结构体的每一个字段都可以用相应的方法直接赋值,转化为二进制的长度也是固定的。那如果是接受到的结构体,该怎么取值呢?

  // 处理接受到的数据    NSData * receiveData;// 你收到的数据   char * k = new char[receiveData.length];  if(k) {//是否为空    tagInfo * tinfo = new (k)tagInfo();    [receiveData getBytes:tinfo length:receiveData.length];    // 字符串是需要转换的    NSString * name = [[NSString alloc]initWithBytes:tinfo->sNickName length:64 encoding:NSUTF8StringEncoding];    NSString * accountNo = [[NSString alloc]initWithBytes:tinfo->sAccountNo length:64 encoding:NSUTF8StringEncoding];    int face = tinfo->nFace;    long cmd = tinfo->cmd;  }

 

不定长结构体

  这个使用的比较多。因为每次发送的消息长度都是不一样的,太长浪费流量,太短消息内容少。

  typedef struct tagInfo {    int nFace;    long cmd;    int  length;    char sNickName[60];    char sAccountNo[60];    char exInfo[1]; // 这个就是不定长的内容  }T_INFO,*PT_INFO;

  不定长的处理,关系到结构体的大小。

  // 赋值  data 为不定长的数据 NSData类型  char * l = new char[data.length+sizeof(tagInfo)];    if(l){      memset(l, 0, data.length+sizeof(tagInfo));      tagInfo * ksm = new(l) tagInfo();      // 算出结构体的长度 这个很关键      ksm->length = (uint32_t)(data.length) + (sizeof(tagInfo));      // 填充定长字段 刚才那几个字段      ksm->nFace = 0;      ksm->cmd = 11;      ... ...      // 将不定长的数据拷贝到对应的地方      memcpy(ksm->bData, data.bytes, data.length);      // 转换为可以发送的二进制      NSData * returnData = [[NSData alloc]initWithBytes:ksm length:ksm.length];}  

 反之接受的处理和定长的一样。不过不定长的那个字段的长度,需要通过length来计算。

  




原标题:iOS IM开发准备工作(五)iOS中的struct怎么处理

关键词:IOS

IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

送货地址:https://www.goluckyvip.com/tag/41578.html
送水节:https://www.goluckyvip.com/tag/41579.html
跨境新闻:https://www.goluckyvip.com/tag/4158.html
搜几亿:https://www.goluckyvip.com/tag/41580.html
搜索结果页:https://www.goluckyvip.com/tag/41581.html
搜索竞价广告:https://www.goluckyvip.com/tag/41582.html
37号文今后是否会更新?一文详解关键信息 :https://www.kjdsnews.com/a/1836441.html
探讨内地人开设香港账户的可行性 :https://www.kjdsnews.com/a/1836442.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流