Objective-C:如何解析NSData?如何分成更小的碎片?

问题描述 投票:0回答:2

我在

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

objective-c parsing nsdata
2个回答
1
投票

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

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


0
投票

使用

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

© www.soinside.com 2019 - 2024. All rights reserved.