2013-06-05 47 views
10

,當我把下面的代碼從HexConverter - Unify Community Wiki出現FormatException使用「X」爲十六進制格式

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中的限制的任何有趣的事情。

那麼有什麼需要準備,初始化,...之前我可以得到一個簡單的十六進制值轉換?

[更新] 顏色是一個團結的結構:

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

我們能看到你的顏色的聲明?還是直接形成維基? – emd

+0

作爲一個簡單的測試,我使用了'System.Drawing.Color.White.R.ToString(「X2」)'並以String返回'FF'。所以是的,在你的例子中什麼是「顏色」? – DonBoitnott

+0

@emd它是Unity的'Color'結構。在wiki中,他們使用不同的「Color32」。這與dtb關於'Single'類型的陳述結合在一起。謝謝:-) – Kay

回答

11

MSDN

十六進制( 「X」)格式說明一個數字轉換爲十六進制數字的字符串。格式說明符的大小寫指示是否對大於9的十六進制數字使用大寫或小寫字符。例如,使用「X」生成「ABCDEF」,使用「x」生成「abcdef」。 此格式僅支持整數類型。

Single是一個浮點型,而不是一個整型。

使用Int32

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

非常感謝。使用int它像預期的那樣工作 - 查看我更新的問題。 – Kay

相關問題