【问题标题】:FormatException when using "X" for hexadecimal formatting使用“X”进行十六进制格式化时出现 FormatException
【发布时间】:2013-06-05 17:10:48
【问题描述】:

我从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(字符串) - 到目前为止听起来不错。

monodevelop 十六进制字符串格式或类似的搜索字符串没有显示任何有趣的关于 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 提到的整数类型的事实。

[Update-2] 更优雅的解决方案:

Color32 color32 = color;
string hex = color32.r.ToString ("X2") + color32.g.ToString ("X2") + color32.b.ToString ("X2");

【问题讨论】:

  • 我们可以看看你的颜色声明吗?还是直接形成wiki?
  • 作为一个简单的测试,我使用了System.Drawing.Color.White.R.ToString("X2") 并收到了字符串返回FF。所以是的,你的例子中的“颜色”是什么?
  • @emd 这是 Unity 的 Color 结构。在 wiki 中,他们使用不同的 Color32。这一点与 dtb 关于类型Single 的声明相结合。谢谢:-)

标签: c# unity3d monodevelop string-formatting


【解决方案1】:

来自MSDN

十六进制(“X”)格式说明符将数字转换为十六进制数字字符串。格式说明符的大小写指示对于大于 9 的十六进制数字是使用大写还是小写字符。例如,使用“X”生成“ABCDEF”,使用“x”生成“abcdef”。 只有整型支持这种格式。

Single 是浮点类型,不是整数类型。

使用Int32

int value = 10;
string result = value.ToString("X2");
// result == "0A"

【讨论】:

  • 非常感谢。使用 int 它可以像预期的那样工作 - 请参阅我更新的问题。
猜你喜欢
  • 1970-01-01
  • 2013-08-05
  • 2012-10-16
  • 2013-01-21
  • 1970-01-01
  • 2012-08-15
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多