即時通訊學習C#和下面的問題即時通訊嘗試解決的問題是將一個數字存儲爲字符串並獲取a,r,g,b值。從argb編號獲得單一顏色值
所以我想從
string s = "4280427042";
去
int a = 255;
int r = 22;
int g = 22;
int b = 22;
什麼是最好的方法?
即時通訊學習C#和下面的問題即時通訊嘗試解決的問題是將一個數字存儲爲字符串並獲取a,r,g,b值。從argb編號獲得單一顏色值
所以我想從
string s = "4280427042";
去
int a = 255;
int r = 22;
int g = 22;
int b = 22;
什麼是最好的方法?
看看Color.FromArgb
。這裏是MSDN Article。 它會返回一個Color
,它允許您訪問a,r,g & b值。
您可以將字符串轉換爲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];
字節順序在由GetBytes方法返回的數組中取決於計算機體系結構是小端還是大端。
這意味着你需要小心字節的順序。你可以使用BitConverter.IsLittleEndian
來幫助你。
您可以使用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.Parse
但uint.Parse
,因爲值可能大於2147483648(就像例子)等不適合一個有符號整數。
這對於給定的例子不起作用。我修改了一下,它的工作原理:'Color.FromArgb((int)uint.Parse(s))' –
@FlatEric謝謝你的提示,更新了答案 –
你是如何從字符串中獲得'a,r,g,b'值的?我不明白這種模式。 –
不是0x22而是22? –