我有一个 NSString @"460046003600430035003900" 代表十六进制颜色 FF6C59。
如何从上述格式的字符串中获取十六进制颜色:
例如:460046003500430032003000 = FF5C20
300030004200350033004500 = 00B53E
我有一个 NSString @"460046003600430035003900" 代表十六进制颜色 FF6C59。
如何从上述格式的字符串中获取十六进制颜色:
例如:460046003500430032003000 = FF5C20
300030004200350033004500 = 00B53E
假设这确实是您所得到的,并且您没有做任何事情来进一步混淆它,请设置一个循环将字符串切割成 2 字节字符串。忽略每隔一个 2 字节的组合。将未忽略的值视为十六进制并转换为 int,从而产生 ASCII 字符的值。对 char 值执行标准十六进制转换以转换为 0..15 int 值。将 int 值累积为 int 中的 4 位量。
所以你必须进行两次 hex->int 转换。
#import <Foundation/Foundation.h>
@interface WeirdFormatDecoder : NSObject
@end
@implementation WeirdFormatDecoder
+(NSString*) decode:(NSString*)string
{
if (!string) return @"";
NSAssert([string length]%2==0, @"bad format");
NSMutableString *s = [NSMutableString new];
for (NSUInteger i=0; i<[string length]-2; i=i+2) {
char c = [[string substringWithRange:NSMakeRange(i, 2)] integerValue];
if (c==0) continue;
else if (c<41){
[s appendFormat:@"%c",[@"0123456789" characterAtIndex:c-30]];
} else {
[s appendFormat:@"%c",[@"ABCDEF" characterAtIndex:c-41]];
}
}
return s;
}
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
NSLog(@"%@",[WeirdFormatDecoder decode:@"460046003600430035003900"]); // FF6C59
return EXIT_SUCCESS;
}
}