10

我正在尝试编写一个接收十六进制值的方法,例如0xD2691E为了返回 UIColor 对象。

找到了这个要转换为方法的宏,但我不知道如何指定除void *.

#define UIColorFromRGB(rgbValue) [UIColor \
       colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
       green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
       blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

  //Then use any Hex value

 self.view.backgroundColor = UIColorFromRGB(0xD2691E);  
4

4 回答 4

12

十六进制值的数据类型是0xD2691E什么?

根据 C 标准,十六进制常量的类型是该列表中可以表示其值的第一个:

C11 (n1570), § 6.4.4.1 整数常数

int
unsigned int
long int
unsigned long int
long long int
unsigned long long int

由于D2691E(b16) 等于13789470(b10),因此常量的类型取决于您的实现。

C 标准只保证这一点INT_MAX >= +32767,而LONG_MAX >= +2147483647.

C11 (n1570), 5.2.4.2.1 整数类型的大小

  • INT_MAX +32767
  • LONG_MAX +2147483647

因此,(unsigned) long int可能是一个合适的选择。

于 2013-04-10T12:07:45.477 回答
1

据我所知,它们类似于 int 或 unsigned int。

于 2013-04-10T12:04:38.423 回答
1

请尝试使用这个......

    unsigned long long 
    unsigned long int
于 2013-04-10T12:05:33.080 回答
0

在这种方法中,它们执行按位AND运算,所以它必须是unsigned of int OR long

于 2013-04-10T12:11:28.030 回答