1

ここに私からのさらに別のばかげた質問があります!

NSString *hex1 = @"50be4f3de4";
NSString *hex2 = @"30bf69a299";

/* some stuff like result = hex1^hex2;    */

NSString *result = @"6001269f7d";

文字列として16進値があり、2つの差分に格納されています。変数。それらをXorする必要があり、結果は別の文字列変数に含まれる必要がありますか?

文字列->NSData->バイト配列->xor'ingを変換して試しましたが、成功しませんでした.....よろしくお願いします...

4

1 に答える 1

8

最初にすべての文字をBase16(16進数の場合)形式に変換する必要があります。次に、それらの文字のXORを続行する必要があります。strtol()関数を使用して、この目的を達成できます。

NSString *hex1 = @"50be4f3de4";
NSString *hex2 = @"30bf69a299";

NSMutableArray *hexArray1 = [self splitStringIntoChars:hex1]; 
NSMutableArray *hexArray2 = [self splitStringIntoChars:hex2]; 

NSMutableString *str = [NSMutableString new];
for (int i=0; i<[hexArray1 count]; i++ )
{
    /*Convert to base 16*/
    int a=(unsigned char)strtol([[hexArray1 objectAtIndex:i] UTF8String], NULL, 16);
    int b=(unsigned char)strtol([[hexArray2 objectAtIndex:i] UTF8String], NULL, 16);

    char encrypted = a ^ b;
    NSLog(@"%x",encrypted);
    [str appendFormat:@"%x",encrypted];        
}
NSLog(@"%@",str);

文字列の文字を分割するために使用したユーティリティメソッド

-(NSMutableArray*)splitStringIntoChars:(NSString*)argStr{
    NSMutableArray *characters = [[NSMutableArray alloc] 
                              initWithCapacity:[argStr length]]; 
    for (int i=0; i < [argStr length]; i++) 
    { 
        NSString *ichar = [NSString stringWithFormat:@"%c", [argStr characterAtIndex:i ]]; 
        [characters addObject:ichar]; 
    } 
    return characters;
}

それが役に立てば幸い!!

于 2012-07-11T06:30:28.930 に答える