这是我的另一个愚蠢的问题!
NSString *hex1 = @"50be4f3de4";
NSString *hex2 = @"30bf69a299";
/* some stuff like result = hex1^hex2; */
NSString *result = @"6001269f7d";
我有一个十六进制值作为字符串,存储在两个diff中。变量。我需要Xor他们,结果应该在另一个字符串变量?
我通过转换字符串尝试了它们 - > NSData - > bytes array - > xor'ing他们......但我没有成功..... 提前谢谢你......
答案 0 :(得分:6)
您必须先将每个字符转换为Base16(十六进制)格式。然后您应该继续对这些字符进行异或。您可以使用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;
}
希望它有所帮助!!