如何将NSString中的十六进制颜色转换为Objective C中的三个单独的rgb整数?

spo*_*ile 1 iphone hex colors objective-c nsstring

我可能正在做一些令人难以置信的简单非常复杂的事情,但到目前为止我所尝试过的任何东西似乎都没有用.

我有像@"BD8F60"这样的NSStrings,我想把它们变成像:r = 189,g = 143,b = 96.

已经找到了将已经整数的十六进制值转换为rgb整数的方法,但我仍然坚持如何将NSString与其中的字母一起更改为一个int,其中字母已被转换为其数字对应物.如果这是非常基本的话,请提前道歉 - 我仍然在非常基本的水平上学习这些东西.

Ali*_*are 12

您需要解析NSString并解释十六进制值.

您可以通过多种方式执行此操作,一种方法是使用NSScanner

NSScanner* scanner = [NSScanner scannerWithString:@"BD8F60"];
int hex;
if ([scanner scanHexInt:&hex]) {
  // Parsing successful. We have a big int representing the 0xBD8F60 value
  int r = (hex >> 16) & 0xFF; // get the first byte
  int g = (hex >>  8) & 0xFF; // get the middle byte
  int b = (hex      ) & 0xFF; // get the last byte
} else {
  NSLog(@"Parsing error: no hex value found in string");
}
Run Code Online (Sandbox Code Playgroud)

还有一些其他的可能性,比如将字符串拆分为3并分别扫描值(而不是按位移和屏蔽),但这个想法保持不变.

注意:正如scanHexInt:文档所解释的那样,如果你的字符串以0xlike 为前缀,这也有效@"0xBD8F60".不会自动使用前缀为哈希的字符串@"#BD8F60".在这种情况下使用子字符串.