2013-06-05 7 views
10

फ़ॉर्मेट करने के लिए का उपयोग कर रहा HexConverter - Unify Community WikiFormatException जब "एक्स" हेक्साडेसिमल

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 स्ट्रिंग प्रारूप हेक्स या इसी तरह के खोज तारों ने मोनो डेवलपमेंट में प्रतिबंधों के बारे में कुछ भी दिलचस्प नहीं दिखाया।

तो क्या कोई सरल हेक्स वैल्यू रूपांतरण प्राप्त करने से पहले, तैयार करने, शुरू करने, ... के लिए कुछ भी है?

[अपडेट] रंग एकता में एक struct है:

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 के बजाय घटक और अभिन्न प्रकार की बात डीटीबी का उल्लेख किया गया है।

[अपडेट-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 ")' का उपयोग किया और स्ट्रिंग रिटर्न 'एफएफ' के रूप में प्राप्त किया। तो हाँ, आपके उदाहरण में "रंग" क्या है? – DonBoitnott

+0

@emd यह एकता की 'रंग' संरचना है। विकी में वे 'Color32' का उपयोग करते हैं जो अलग है। डीटीबी के बयान के साथ संयोजन 'सिंगल' के बारे में यह बिंदु था। धन्यवाद :-) – Kay

उत्तर

11

से MSDN:

हेक्साडेसिमल ("X") फॉर्मेट स्पेसिफायर एक नंबर हेक्साडेसिमल अंक की एक स्ट्रिंग में धर्मान्तरित । प्रारूप विनिर्देशक का मामला इंगित करता है कि 9 से अधिक वाले हेक्साडेसिमल अंकों के लिए अपरकेस या लोअरकेस अक्षरों का उपयोग करना है या नहीं, उदाहरण के लिए, "एबीसीडीईएफ" उत्पन्न करने के लिए "एक्स" का उपयोग करें और "एक्ससीडीएफ" उत्पन्न करने के लिए "x" का उपयोग करें। यह प्रारूप केवल अभिन्न प्रकार के लिए समर्थित है।

Single एक फ़्लोटिंग-पॉइंट प्रकार है, एक अभिन्न प्रकार नहीं है।

उपयोग एक Int32:

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

बहुत धन्यवाद। Int का उपयोग करना यह अपेक्षित काम करता है - मेरा अद्यतन प्रश्न देखें। – Kay

संबंधित मुद्दे