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是基础,学好它!
感谢阅读,希望对您有所帮助!如果有用欢迎转载,请注明出处,您的支持是我不断更新的动力。

你可能感兴趣的:(NSData豆知識)