NSData豆知識

补充

豆知識(まめちしき):豆知识是日语中的一个说法,指一些日常生活中鲜为人知但又实用的小窍门。毎日ひとつ、豆知識ラララ:每天get一点豆知识啦啦啦~

背景

今天调试socket遇到不少坑,主要涉及NSData这里总结一下。

  1. 拿到socket数据后,应该首先在NSData情况下处理,即最原始的16进制asc码数组的形式下处理,待相应业务处理完毕,再使用```NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

2. NSData其实可以理解为C的char数组,请牢记OC就是C的一个超集,可以完美兼容C,下面列举一些典型代码,并复习一下C,请看下面代码:

char *a = "hello, world\0";
//char数组转NSData,计算长度不能用sizeof(a)哦,否则永远是char指针所占内存大小,32位4B,64位8B。
NSData *hwData = [NSData dataWithBytes:a length:strlen(a)];

NSMutableData *socketDataBuffer = [NSMutableData new];// 初始化
[socketDataBuffer appendData:hwData];// 末尾赋上

char *head = [socketDataBuffer bytes];// 获取socketDataBuffer首地址
int len = [socketDataBuffer length];//计算socketDataBuffer数组长度,以char单位(bytes)计。
char *tail = head + len;//获取socketDataBuffer末地址之后那个,这里是'\0'

char buf[20];
int size = (tail - head)/(sizeof(char));
memset(buf, 0, sizeof(buf));//清0
memcpy(buf, head, size);//安全拷贝内存数据,注意如果用strncpy遇到\x00就不拷贝了哟,是坑哦。
NSData *cellData = [NSData dataWithBytes:buf length:size];//截取出"hello, world"

NSString *cellString = [[NSString alloc] initWithData:cellData encoding:NSUTF8StringEncoding];//NSData转NSString

###总结
其实就只有一句话:C是基础,学好它!
感谢阅读,希望对您有所帮助!如果有用欢迎转载,请注明出处,您的支持是我不断更新的动力。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iPhone的标准推荐是CFNetwork 库编程,其封装好的开源库是 cocoa AsyncSocket库,用它...
    Ethan_Struggle阅读 2,288评论 2 12
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • OC中的类分为可变和不可变。下表列出了Foundation框架中主要的可变类和不可变类: 种类 不可变类 可变类 ...
    陈_振阅读 565评论 0 0
  • 接下来我们看base文件下的Foundation文件夹下文件 Base - Foundation 这个文件夹里面的...
    充满活力的早晨阅读 2,182评论 0 1
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,766评论 0 4