美文网首页
NSData豆知識

NSData豆知識

作者: QihuaZhou | 来源:发表于2016-03-19 23:01 被阅读188次

    补充

    豆知識(まめちしき):豆知识是日语中的一个说法,指一些日常生活中鲜为人知但又实用的小窍门。毎日ひとつ、豆知識ラララ:每天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豆知識

          本文链接:https://www.haomeiwen.com/subject/auwhlttx.html