iOS获取字符串string的异或值
1、HKXORManager.h文件
#import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface HKXORManager : NSObject + (HKXORManager *)shareManager; /** * 计算异或值 * @param string 需要异或的字符串 * @return 获取异或后的字符串 */ - (NSString *)stringXOR:(NSString *)string; @end NS_ASSUME_NONNULL_END
2、HKXORManager.m文件
#import "HKXORManager.h" @implementation HKXORManager + (HKXORManager *)shareManager { static HKXORManager *instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[HKXORManager alloc] init]; }); return instance; } - (NSString *)stringXOR:(NSString *)string { if (string.length%2) { string = [NSString stringWithFormat:@"0%@", string]; } NSString *code = @"00"; for (int i=0; i<string.length; i=i+2) { // 两位两位取出 NSString *subString = [string substringWithRange:NSMakeRange(i, 2)]; // subString转为16进制 NSString *hexString = [self toHex:[subString integerValue]]; code = [self pinxCreator:code withPinv:hexString]; } return code; } - (NSString *)pinxCreator:(NSString *)pan withPinv:(NSString *)pinv { if (pan.length != pinv.length) { return nil; } const char *panchar = [pan UTF8String]; const char *pinvchar = [pinv UTF8String]; NSString *temp = [[NSString alloc] init]; for (int i = 0; i < pan.length; i++) { int panValue = [self charToint:panchar[i]]; int pinvValue = [self charToint:pinvchar[i]]; temp = [temp stringByAppendingString:[NSString stringWithFormat:@"%X",panValue^pinvValue]]; } return temp; } - (int)charToint:(char)tempChar { if (tempChar >= '0' && tempChar <='9') { return tempChar - '0'; } else if (tempChar >= 'A' && tempChar <= 'F') { return tempChar - 'A' + 10; } else if (tempChar >= 'a' && tempChar <= 'f') {
return tempChar - 'a' + 10;
}
return 0;
}
// 十进制转换为十六进制的。
- (NSString *)toHex:(long long int)tmpid {
NSString *nLetterValue;
NSString *str =@"";
long long int ttmpig;
for (int i = 0; i<9; i++) {
ttmpig = tmpid%16;
tmpid = tmpid/16;
switch (ttmpig) {
case 10:
nLetterValue =@"A";
break;
case 11:
nLetterValue =@"B";
break;
case 12:
nLetterValue =@"C";
break;
case 13:
nLetterValue =@"D";
break;
case 14: nLetterValue =@"E";
break; case 15:
nLetterValue =@"F";
break;
default:
nLetterValue=[[NSString alloc]initWithFormat:@"%lli",ttmpig];
}
str = [nLetterValue stringByAppendingString:str];
if (tmpid == 0) { break; }
}
if (str.length==1) {
str = [NSString stringWithFormat:@"0%@", str];
}
return str;
}
@end