私は、16進色FF6C59を表すNSString@"460046003600430035003900"を持っています。
上記の形式の文字列からその16進色を取得するにはどうすればよいですか?
例:460046003500430032003000 = FF5C20
300030004200350033004500 = 00B53E
私は、16進色FF6C59を表すNSString@"460046003600430035003900"を持っています。
上記の形式の文字列からその16進色を取得するにはどうすればよいですか?
例:460046003500430032003000 = FF5C20
300030004200350033004500 = 00B53E
それが本当にあなたが得ているものであり、それをさらに難読化するために何かをしていないと仮定して、文字列を2バイトの文字列に切り刻むループを設定します。1つおきの2バイトコンボを無視します。無視されない値を16進数として扱い、intに変換すると、ASCII文字の値になります。0..15 int値に変換するには、char値に対して標準の16進変換を実行します。int値をintの4ビット量として累積します。
したがって、hex->int変換を2回実行する必要があります。
#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;
}
}