XOR'ing存储为NSString的两个十六进制值?

Sat*_*esh 1 hex objective-c xor

这是我的另一个愚蠢的问题!

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

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

NSString *result = @"6001269f7d";
Run Code Online (Sandbox Code Playgroud)

我有一个十六进制值作为字符串,存储在两个差异.变量.我需要Xor他们,结果应该在另一个字符串变量?

我尝试通过转换字符串 - > NSData - >字节数组 - > xor'ing他们......但我没有成功.....提前谢谢你...

Mr.*_*ous 7

你必须每一个字符(十六进制)格式转换为Base16 first.Then你应该与异或那些characters.You可以使用与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);
Run Code Online (Sandbox Code Playgroud)

我用来分割字符串字符的实用方法

-(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;
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!!