我在
NSData
对象中有以下数据:
<00000000 6f2d840e 31504159 2e535953 2e444446 3031a51b 8801015f
2d02656e 9f110101 bf0c0cc5 0affff3f 00000003 ffff03>
此数据包含由标签标记的信息:
标签 1 是从字节值
0x84
到 0xa5
,
标签 2 是从字节值
0xa5
到 0x88
,
标签 3 是从字节值
0x88
到 0x5f2d
,
标签 4 是从字节值
0x5f2d
到 0x9f11
。
我如何从
NSData
对象获取这些“标签”的值?
问候, EZFrag
我找到了一个很好的解决方案,决定实际使用灰质
-(int)getIndexOfSubDataInData:(NSData*)haystack forData:(NSData*)needle{
int dataCounter = 0;
NSRange dataRange = NSMakeRange(dataCounter, [needle length]);
NSData* compareData = [haystack subdataWithRange:dataRange];
while (![compareData isEqualToData:needle]) {
dataCounter++;
dataRange = NSMakeRange(dataCounter, [needle length]);
compareData = [haystack subdataWithRange:dataRange];
}
return dataCounter;
}
-(NSData*)getSubDataInData:(NSData*)targetData fromTag:(NSData*)fromTag toTag:(NSData*)toTag{
int startIndex = [self getIndexOfSubDataInData:targetData forData:fromTag] + [fromTag length];
int endIndex = [self getIndexOfSubDataInData:targetData forData:toTag];
int dataLength = endIndex - startIndex;
NSRange dataRange = NSMakeRange(startIndex, dataLength);
return [targetData subdataWithRange:dataRange];
}
//here is how I use the code
NSData* langTagStart=[[NSData alloc] initWithBytes:"\x5F\x2D" length:2];
NSData* langTagEnd=[[NSData alloc] initWithBytes:"\x9F\x11" length:2];
NSData* languageData = [self getSubDataInData:[response bytes] fromTag:langTagStart toTag:langTagEnd];
感谢您的建议。
问候, EZFrag
使用
-[NSData bytes]
获取指向内容的指针。然后使用指针算术迭代字节,直到找到您要查找的内容。由于您想要逐字节进行处理,因此您可能应该将 bytes
返回的指针强制转换为 uint8_t*
。然后,pointer[0]
指向第一个字节,pointer[1]
指向第二个字节,依此类推。