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

グレーマターを実際に使用することを決定して、私は素晴らしい解決策を管理しました

-(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 に答える
0

-[NSData bytes]コンテンツへのポインターを取得するために使用します。次に、ポインター演算を使用して、探しているものが見つかるまでバイトを反復処理します。バイトごとに移動したいので、おそらく によって返されたポインターをキャストする必要がありbytesますuint8_t*。次に、pointer[0]最初のバイト、2 番目のバイト、というようにポイントしpointer[1]ます。

于 2012-06-12T10:39:00.880 に答える