回答
首先得到該範圍內,則獲得數據:
// 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:'。似乎對我有用? –