OC中网络传输的时候对字节流的操作 & 对字节的处理 & 野指针问题
2013-09-22 07:15
435 查看
//包头:42个字节,第一个字节【目前基本上没用到,无需理会】,第二个字节【表示session的长度】,3-6字节【内容的长度】,最后36字节【客户端发送请求时的标示,当服务端返回结果时,客户端用来表示是哪个请求的返回结果。就是一个GUID或UUID】
char first = target.isPrice; //第1个字节,暂时没有用到
char second = [target.session length]; //第2个字节
int third = [target.content length]; //第3-6个字节
NSData *four = [target.invokeIddataUsingEncoding:NSASCIIStringEncoding];//最后36个字节是一个invokeId的uuid字串,字串使用ASCII编码
// const char *fourth = [target.invokeId UTF8String];
NSMutableData *data = [[NSMutableDataalloc]init];
[data appendBytes:&first length:sizeof(first)];
[data appendBytes:&second length:sizeof(second)];
[data appendBytes:&third length:sizeof(third)];
[data appendData:four];
[data appendData:target.content];//content默认就是使用utf-8编码
//重点是对于uuid的操作,第7-42字节就是一个uuid的字串,下面的uuid于guid 2种方式都可以顺利的取出包种的uuid,并转换成字串
int pkgCount;
char char1,char2;
char *uuid = malloc(36); //使用自己申请的一块buffer来存放uuid,记得不用的时候要手动释放掉此块内存,因为arc对于c语言是没有用的。
char guid[36]; //直接使用数组来存放uuid
[data getBytes:uuidrange:NSMakeRange(6,36)];
NSData *uuidData = [NSData dataWithBytes:uuid length:sizeof(uuid)];//注意:这里不能使用sizeof(uuid)因为uuid是一个指针,永远是4个字节,这里必须制定大小为36才对
NSString *uuidStr = [[NSStringalloc]initWithData:uuidDataencoding:NSUTF8StringEncoding];
free(uuid);//如果不释放,直接把指针置空,就会内存泄露
uuid = NULL;//指针指向的内容释放之后,要把指针置为空,防止野指针
从这里看处,还是使用guid[36]方便,不用管内存的释放问题。
[data getBytes:guidrange:NSMakeRange(6,36)];
NSData *guidData = [NSData dataWithBytes:guid length:sizeof(guid)];
NSString *guidStr = [[NSStringalloc]initWithData:guidDataencoding:NSUTF8StringEncoding];
NSData *dataContent = [data subdataWithRange:NSMakeRange(42, [datalength]-42)];//从第42个字节开始到最后是内容
NSString *msg = [[NSStringalloc]initWithData:dataContentencoding:NSUTF8StringEncoding];
return data;
野指针问题:内存释放之后,要记得把指针置为null,防止野指针问题
【原文:http://blog.csdn.net/itianyi/article/details/8731678】
char first = target.isPrice; //第1个字节,暂时没有用到
char second = [target.session length]; //第2个字节
int third = [target.content length]; //第3-6个字节
NSData *four = [target.invokeIddataUsingEncoding:NSASCIIStringEncoding];//最后36个字节是一个invokeId的uuid字串,字串使用ASCII编码
// const char *fourth = [target.invokeId UTF8String];
NSMutableData *data = [[NSMutableDataalloc]init];
[data appendBytes:&first length:sizeof(first)];
[data appendBytes:&second length:sizeof(second)];
[data appendBytes:&third length:sizeof(third)];
[data appendData:four];
[data appendData:target.content];//content默认就是使用utf-8编码
//重点是对于uuid的操作,第7-42字节就是一个uuid的字串,下面的uuid于guid 2种方式都可以顺利的取出包种的uuid,并转换成字串
int pkgCount;
char char1,char2;
char *uuid = malloc(36); //使用自己申请的一块buffer来存放uuid,记得不用的时候要手动释放掉此块内存,因为arc对于c语言是没有用的。
char guid[36]; //直接使用数组来存放uuid
[data getBytes:uuidrange:NSMakeRange(6,36)];
NSData *uuidData = [NSData dataWithBytes:uuid length:sizeof(uuid)];//注意:这里不能使用sizeof(uuid)因为uuid是一个指针,永远是4个字节,这里必须制定大小为36才对
NSString *uuidStr = [[NSStringalloc]initWithData:uuidDataencoding:NSUTF8StringEncoding];
free(uuid);//如果不释放,直接把指针置空,就会内存泄露
uuid = NULL;//指针指向的内容释放之后,要把指针置为空,防止野指针
从这里看处,还是使用guid[36]方便,不用管内存的释放问题。
[data getBytes:guidrange:NSMakeRange(6,36)];
NSData *guidData = [NSData dataWithBytes:guid length:sizeof(guid)];
NSString *guidStr = [[NSStringalloc]initWithData:guidDataencoding:NSUTF8StringEncoding];
NSData *dataContent = [data subdataWithRange:NSMakeRange(42, [datalength]-42)];//从第42个字节开始到最后是内容
NSString *msg = [[NSStringalloc]initWithData:dataContentencoding:NSUTF8StringEncoding];
return data;
野指针问题:内存释放之后,要记得把指针置为null,防止野指针问题
【原文:http://blog.csdn.net/itianyi/article/details/8731678】
相关文章推荐
- OC中网络传输的时候对字节流的操作 & 对字节的处理 & 野指针问题
- 数据通过网络传输过程中如果传输的数据为富文本,其中包含了&字符,获取数据时会出问题
- 关于网络传输字节顺序的问题: hton? or ntoh?-
- 解决TCP网络传输"粘包"问题
- svn使用&&常用操作&&问题处理
- iOS 网络请求 时 出现 <null> 与 (null) 的 问题的处理方法
- 字节、字节序、内存对齐 与 跨机器、网络传输、字符操作
- Swift 中的网络请求问题 OC(AFNetworking) && Swift(Alamofire)
- 多线程问题 ----- UI视图 & 网络下载 同时执行操作
- 关于网络传输字节顺序的问题: hton? or ntoh?
- 【计算机网络】传输层协议TCP&TCP的3次握手4次挥手问题
- ACM做音频传输的时候,有严重的延迟问题,这个控件来自网络,添加了4个录音缓冲区,解决延迟问题
- oc 关于对象release后 指向它的指针如何处理的问题
- 关于网络传输字节顺序的问题: hton? or ntoh?
- Foxmail接收邮件时,报出"网络操作失败","POP3:****"问题的解决办法
- 关于网络传输字节顺序的问题
- 关于网络传输字节顺序的问题: hton? or ntoh?
- 一个双线程下同一时候操作指针变量导致野指针出现的问题总结
- 转:IPhone之ASIFormDataRequest POST操作架构设计/ 处理网络超时问题
- 关于网络传输字节顺序的问题: hton? or ntoh?