我正在学习C#以及我试图解决的以下问题是将一个数字存储为字符串并获取a,r,g,b值。
所以我想从
开始string s = "4280427042";
到
int a = 255;
int r = 22;
int g = 22;
int b = 22;
最好的方法是什么?
答案 0 :(得分: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];
GetBytes方法返回的数组中的字节顺序取决于计算机体系结构是小端还是大端。
这意味着您需要注意字节的顺序。您可以使用BitConverter.IsLittleEndian
来帮助您。
答案 1 :(得分: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 感谢Flat Eric的提示:不要只使用int.Parse
而是uint.Parse
,因为值可能大于2147483648(就像示例一样)和所以不适合签名的int。
答案 2 :(得分:1)
看看PHPhotoLibrary
。这是MSDN Article。
它会返回Color.FromArgb
,让您访问a,r,g& b值。