如何检查NSData对象是否包含子NSData? [英] How do I check whether an NSData object contains a sub-NSData?

查看:151
本文介绍了如何检查NSData对象是否包含子NSData?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个NSData对象,其中包含一些我需要的数据。我想做的就是找出数据 FF D8的位置(JPEG数据的开始)

I have an NSData object which contains some data I need. What I wanted to do is to find out the position of data "FF D8" (start of JPEG data)

如何实现这样的工作?

推荐答案

首先获取范围,然后获取数据:

First get the range, then get the data:

// The magic start data object is only created once safely and 
// then reused each time
static NSData* magicStartData = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
  static const uint8_t magic[] = { 0xff, 0xd8 };
  magicStartData = [NSData dataWithBytesNoCopy:(void*)magic length:2 freeWhenDone:NO];
});

// assume data is the NSData with embedded data
NSRange range = [data rangeOfData:magicStartData options:0 range:NSMakeRange(0, [data length])];
if (range.location != NSNotFound) {
  // This assumes the subdata doesn't have a specific range and is just everything
  // after the magic, otherwise adjust
  NSData* subdata = [data subdataWithRange:NSMakeRange(range.location, [data length] - range.location)];
}

这篇关于如何检查NSData对象是否包含子NSData?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆