数据打包和解包入门篇

2016-06-27 zzyhappyzzy 更多博文 » 博客 » GitHub »

打包/解包

原文链接 http://zyoung.me/%E6%95%B0%E6%8D%AE%E6%89%93%E5%8C%85%E5%92%8C%E8%A7%A3%E5%8C%85%E5%85%A5%E9%97%A8%E7%AF%87/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


数据的传输和获取,通常会涉及到数据的压缩和解压等操作
<!--more--> 如果现在有这么个需求

1、从服务器下载的图片,根据图片的二进制数据流决定图片的格式,你会怎么办? (数据截取) 2、需要将用户每天24小时的生活状态传到服务器,然后可以按年/月/周/天取出并统计、展示等,你会怎么办?(字节数组)

对于上面的问题,我们就必须考虑数据结构,并实现压缩和解压等操作
下面给予一个简单的示例,希望有所启示

  //打包

    int tmpSize = 10;
    Byte *tmpBuffer = malloc(sizeof(Byte)*tmpSize);
    for (int i = 0;i<tmpSize;i++) {
        tmpBuffer[i] = i;
    }
    NSData *data = [[NSData alloc] initWithBytes:tmpBuffer length:tmpSize];

    //解包

    NSInteger length = data.length;
    Byte *parseBuffer = malloc(sizeof(Byte) * length);
    [data getBytes:parseBuffer length:length];
//    [data getBytes:parseBuffer range:NSMakeRange(0, length)];
    Byte *p = parseBuffer;
    Byte *q = parseBuffer+length;
    while (p<q) {
        int parseValue = *p;
        NSLog(@"parse value is %d",parseValue);
        ++p;
    }

    free(tmpBuffer);
    free(parseBuffer);