2

NSDataビアの文字列表現を取得しました。テスト目的でNSLogオリジナルを再構築したいのですがNSData、これを行うための最良の方法は何ですか?

例えば

<fe010200 00000000 00011012>
4

2 に答える 2

0

次のようなものだと思います:

NSArray *wordStrings =
    [string componentsSeparatedByCharactersInSet:
        [[NSCharacterSet alphanumericCharacterSet] invertedSet]];

NSMutableData *collectedData = [NSMutableData dataWithCapacity:wordStrings.count * sizeof(unsigned)];

for(NSString *word in wordStrings)
{
    NSScanner *scanner = [NSScanner scannerWithString:word];
    unsigned newInt;
    [scanner scanHexInt:&newInt];
    [collectedData appendBytes:&newInt length:sizeof(unsigned)];
}

NSString を使用してスペーシングを適用した後、すべての単語に対してスキャナーを作成しますが、スキャナーですべてを実行する方が効率的ですが、デバッグのためだけですよね? このようにして、文字列の分割に関する仮定が正確であることを確認するために、wordStrings の中点を取得します。

于 2013-03-05T22:02:20.630 に答える
0

以下は、数値の単純なスキャンを実行し、その値を NSMutableData オブジェクトに追加する 2 行です。

    NSString *dataIn = @"<fe010200 00000000 00011012>";

    const char *ptr = [dataIn cStringUsingEncoding:NSUTF8StringEncoding];

    NSMutableData *data = [NSMutableData data];

    while (*ptr) {
        unsigned char c1 = *ptr;
        ptr++;
        if (isalpha(c1))
            c1 = (10 + c1 - 'a')<<4;
        else if (isnumber(c1))
            c1 = (c1 - '0')<<4;
        else
            continue;
        if (!*ptr)
            break; // Shouldn't occure -- bad input
        unsigned char c2 = *ptr;
        ptr++;
        if (isalpha(c2))
            c2 = 10 + c2 - 'a';
        else if (isnumber(c2))
            c2 = c2 - '0';
        c1 = c1 | c2;
        [data appendBytes:&c1 length:1];
    }

    NSLog(@"%@", data);
于 2013-04-12T20:33:55.427 に答える