Wziąłem następujący kod z HexConverter - Unify Community WikiFormatException podczas korzystania z „X” dla szesnastkowym formatowania
string hex = color.r.ToString("X2") + color.g.ToString("X2") + color.b.ToString("X2");
To daje mi wyjątek:
FormatException: The specified format 'X2' is invalid
próbowałem następnie użyć "D"
ale nawet ten rzucił błąd. Jedyne, co działa, to "F
do formatowania liczby zmiennoprzecinkowej.
Przejdź do deklaracji ujawnia mscorlib.dll/System/Single.ToString (ciąg) w przeglądarce zespołu - brzmi jak dotąd dobrze.
Googling dla monodevelop string format hex lub podobnych ciągów wyszukiwania nie wykazały nic ciekawego w odniesieniu do ograniczeń w MonoDevelop.
Czy jest coś, co można przygotować, zainicjować, zanim będzie można uzyskać prostą konwersję wartości heksadecymalnej?
[Aktualizacja] Kolor jest struct w Jedności:
public struct Color
{
public float r;
public float g;
public float b;
// ...
Biorąc odpowiedź DTB w końcu dostał pracę przy użyciu:
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);
więc brakowało mi fakt, że Color
określa jego komponenty takie jak float
zamiast int
i wspomniano o dtb typu całkowego.
[Update-2] bardziej eleganckie rozwiązanie:
Color32 color32 = color;
string hex = color32.r.ToString ("X2") + color32.g.ToString ("X2") + color32.b.ToString ("X2");
możemy zobaczyć swój deklaracja koloru? lub jest to bezpośrednio z wiki? – emd
Jako prosty test użyłem 'System.Drawing.Color.White.R.ToString (" X2 ")' i otrzymałem jako String return 'FF'. Więc tak, czym jest "kolor" w twoim przykładzie? – DonBoitnott
@emd To jest struktura "Color" Unity. Na wiki używają 'Color32', który jest inny. Tak właśnie było w połączeniu z oświadczeniem dtb o typie 'Single'. Dzięki :-) – Kay