目标C - 解析NSData的
我有一个NSData对象中的以下数据:目标C - 解析NSData的
< 00000000 6f2d840e 31504159 2e535953 2e444446 3031a51b 8801015f 2d02656e 9f110101 bf0c0cc5 0affff3f 00000003 ffff03>
我有这个解析数据问题。该数据包含由标签标记信息
标签1是从字节值的0x84至0xA5的
标记2是从字节值0xA5的设置为0x88
标签3是从字节值均为0x88到0x5f0x2d
标签4是从字节值0x5f0x2d到0x9f0x11
我该如何去从NSData对象获取这些值?
问候, EZFrag
我管理的一个很好的解决方案,决定实际使用graymatter
-(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];
感谢您的建议。
Regards, EZFrag
我使用NSUTF8StringEncoding将NSString“Hello $ World $”转换为NSData,然后希望从该数据中找到World,所以现在我已经使用了上面的代码并将“\ x24”设置为lagTagStart的字节(因为$ in Bytes的值为36 ,即十六进制24)和长度1,为langTagEnd做类似的事情,并传递给getSubDataInData,因为你已经做了,但它给方法getSubDataInData EXC_BAD_ACCESS,你能解释我为什么这件事情发生和我需要什么变化获得字符串世界出来的。非常感谢您的帮助 –
@ETFrag你确切的需要?我认为最好将它转换为NSString或其他你需要的东西。 –