如何将带有十六进制值的NSString转换为Char - Objective C

时间:2013-02-15 16:48:54

标签: ios objective-c nsstring hex

我有一个NSString @“460046003600430035003900”,它代表十六进制颜色FF6C59。

如何从上述格式的字符串中获取该十六进制颜色:

例如: 460046003500430032003000 = FF5C20

300030004200350033004500 = 00B53E

2 个答案:

答案 0 :(得分:1)

假设你真正得到的东西,并且你没有做些什么来进一步混淆它,设置一个循环来将字符串切成2字节的字符串。忽略所有其他2字节组合。将非忽略值视为十六进制并转换为int,从而生成ASCII char的值。对char值执行标准十六进制转换以转换为0..15 int值。将int值累积为int中的4位数量。

所以你必须做两次hex-> int转换。

答案 1 :(得分:0)

#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;
    }
}