2016-02-05 76 views
0

即时通讯学习C#和下面的问题即时通讯尝试解决的问题是将一个数字存储为字符串并获取a,r,g,b值。从argb编号获得单一颜色值

所以我想从

string s = "4280427042"; 

int a = 255; 
int r = 22; 
int g = 22; 
int b = 22; 

什么是最好的方法?

+0

你是如何从字符串中获得'a,r,g,b'值的?我不明白这种模式。 –

+1

不是0x22而是22? –

回答

1

看看Color.FromArgb。这里是MSDN Article。 它会返回一个Color,它允许您访问a,r,g & b值。

3

您可以将字符串转换为32位无符号整数,然后用BitConverter得到这样的单个字节:

string s = "4280427042"; 

uint argb = Convert.ToUInt32(s); 

byte[] values = BitConverter.GetBytes(argb); 

int a = values[3]; 
int r = values[2]; 
int g = values[1]; 
int b = values[0]; 

this MSDN reference报价:

字节顺序在由GetBytes方法返回的数组中取决于计算机体系结构是小端还是大端。

这意味着你需要小心字节的顺序。你可以使用BitConverter.IsLittleEndian来帮助你。

2

您可以使用Color.FromArgb()和存取权限这样的单值:

string s = "4280427042"; 
Color color = Color.FromArgb((int)uint.Parse(s)); 

int a = color.A; 
int r = color.R; 
int g = color.G; 
int b = color.B; 

注意uint.Parse可能会抛出异常,如果string不包含有效uint。最好使用uint.TryParse并做一些错误处理。

UPDATE由于平板埃里克的提示:不要只使用int.Parseuint.Parse,因为值可能大于2147483648(就像例子)等不适合一个有符号整数。

+1

这对于给定的例子不起作用。我修改了一下,它的工作原理:'Color.FromArgb((int)uint.Parse(s))' –

+0

@FlatEric谢谢你的提示,更新了答案 –