首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查NSData对象是否包含子NSData?

如何检查NSData对象是否包含子NSData?
EN

Stack Overflow用户
提问于 2013-08-28 00:50:15
回答 2查看 5K关注 0票数 0

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

我怎样才能做到这样的工作呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-28 01:17:55

首先得到范围,然后得到数据:

代码语言:javascript
复制
// 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)];
}
票数 9
EN

Stack Overflow用户

发布于 2013-08-28 01:11:32

试试NSData rangeOfData:options:range:

代码语言:javascript
复制
    NSData *data = /* Your data here */;

    UInt8 bytes_to_find[] = { 0xFF, 0xD8 };
    NSData *dataToFind = [NSData dataWithBytes:bytes_to_find
                                        length:sizeof(bytes_to_find)];

    NSRange range = [data rangeOfData:dataToFind
                              options:kNilOptions
                                range:NSMakeRange(0u, [data length])];

    if (range.location == NSNotFound) {
        NSLog(@"Bytes not found");
    }
    else {
        NSLog(@"Bytes found at position %lu", (unsigned long)range.location);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18477710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档