我从HexConverter - Unify Community Wiki获取了以下代码。
string hex = color.r.ToString("X2") + color.g.ToString("X2") + color.b.ToString("X2");
这给了我一个异常:
FormatException: The specified format 'X2' is invalid
我尝试使用"D"
,但是这仍然会导致错误。唯一有效的方法是使用"F"
来格式化浮点数。
转到声明在程序集浏览器中显示mscorlib.dll/System/Single.ToString(string),听起来很不错。
谷歌搜索monodevelop string format hex或类似的搜索字符串没有显示关于MonoDevelop限制的有趣信息。
那么,在进行简单的十六进制值转换之前,是否有任何准备、初始化等需要做的事情?
[更新] 颜色是Unity中的一个结构体:
public struct Color
{
public float r;
public float g;
public float b;
// ...
参考 dtb 的答案,我最终使用以下方法使其正常工作:
int r = (int)(color.r * 256);
int g = (int)(color.g * 256);
int b = (int)(color.b * 256);
string hex = string.Format ("{0:X2}{1:X2}{2:X2}", r, g, b);
我没注意到Color
将其组件定义为float
而不是int
,并且还有dtb提到的整数类型的事情。
[更新-2] 更加优雅的解决方案:
Color32 color32 = color;
string hex = color32.r.ToString ("X2") + color32.g.ToString ("X2") + color32.b.ToString ("X2");
System.Drawing.Color.White.R.ToString("X2")
并得到了字符串返回值FF
。那么,在你的例子中,“color”是什么? - DonBoitnottColor
结构体。在维基百科中,他们使用的是不同的Color32
。这就是与dtb有关类型Single
的声明的结合点。谢谢 :-) - Kay