回答
首先得到该范围内,则获得数据:
// 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 * magicStartData = [NSData dataWithBytesNoCopy:{0xff,0xd8} length:2 freeWhenDone:NO];'使数据比较不变?由于这个“FF D8”数据不需要频繁分配。 –
@AndrewChang你可以用'dispatch_once'调用。我会更新我的答案以表明这是一个例子。 –
哇,我以前还不知道这个功能。另一个新的知识,谢谢! –
尝试NSData rangeOfData:options:range:
:
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. 可以检查NSData是否包含NSString
- 2. 检查NSData是否包含ASCII或UTF8编码
- 3. 类型检查:如何检查NSData是否是NSArray?
- 4. 检查一个NSData对象中的位
- 5. 如何确定NSData对象是否包含特定的HTML标记?
- 6. NSData null检查
- 7. 如何检查NSDATA类型?
- 8. 从NSData对象
- 9. 如何序列化包含NSData的对象?
- 10. 如何检查会话对象是否包含任何对象?
- 11. 如何检查对象是否包含对象集合
- 12. 如何检查对象的ArrayList是否包含我的对象?
- 13. 检查JavaScript对象是否包含X?
- 14. 检查java arraylist是否包含对象
- 15. 检查HashSet/HashMap是否包含对象
- 16. 如何检查NSData是否有多媒体内容?
- 17. 创建一个包含二进制字节的NSdata对象
- 18. 从包含文件创建一个NSData对象
- 19. 检查猫鼬对象是否包含子字段的函数
- 20. 如何从NSData对象中获取值
- 21. 如何将CoreData对象转换为NSData
- 22. 如何用NSMutableArray初始化NSData对象?
- 23. 如何编码或转换NSData对象
- 24. Rspec:检查数组是否包含包含属性的对象
- 25. NSData对象被反转
- 26. NSData initWithContentsOfURL:options:errorPtr:委托对象?
- 27. iPhone中的NSData对象
- 28. MsgPack不能messagepack NSData对象
- 29. 单独的NSData对象
- 30. iOS如何检查NSMutableArray是否包含NSNumber对象?
使用'-bytes'方法得到的指针数据,然后做一个循环,寻找0xff,如果发现它,检查是否后面跟着0xd8。 – zneak
这是一种方法。但我想知道是否有更短的编码方式,比如NSString的rangeOfString:Oops,我只是发现NSData的方法'rangeOfData:options:range:'。似乎对我有用? –