2016-02-05 29 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謝謝你的提示,更新了答案 –