2

我在 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

4

2 回答 2

0

用于-[NSData bytes]获取指向内容的指针。然后使用指针算法遍历字节,直到找到您要查找的内容。由于您想逐字节进行,因此您可能应该将返回的指针转换为bytesto uint8_t*。然后,pointer[0]指向第一个字节,pointer[1]指向第二个字节,依此类推。

于 2012-06-12T10:39:00.880 回答
0

我管理了一个很好的解决方案,决定实际使用灰质

-(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

于 2012-06-14T12:05:00.963 回答