使用"X"用于十六进制格式

本文关键字:quot 格式 十六进制 使用 用于 | 更新日期: 2023-09-27 18:16:59

我从HexConverter - unified 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字符串格式十六进制或类似的搜索字符串没有显示任何关于monodevelop限制的有趣内容。

有什么要准备,初始化,…在我能得到一个简单的十六进制值转换?

(更新)

Color在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");

使用"X"用于十六进制格式

From MSDN:

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

Single是浮点型,不是整型。

使用Int32:

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