FormatException при использовании "X" для шестнадцатеричного форматирования

Я взял следующий код из 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(строка) в браузере сборок - пока звучит неплохо.

Googling для 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");

Ответ 1

От MSDN:

Спецификатор формата шестнадцатеричного ( "X" ) преобразует число в строку шестнадцатеричных цифр. Случай спецификатора формата указывает, следует ли использовать символы верхнего и нижнего регистра для шестнадцатеричных цифр, которые больше 9. Например, используйте "X" для создания "ABCDEF" и "x" для создания "abcdef". Этот формат поддерживается только для интегральных типов.

Single - тип с плавающей точкой, а не интегральный тип.

Используйте Int32:

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