जवाबों:
मुझे आश्चर्य है कि किसी ने भी सही में निर्मित स्थैतिक विधि का उल्लेख नहीं किया है System.Char...
int val = (int)Char.GetNumericValue('8');
// val == 8
double, हालांकि
Char.GetNumericValue('⅓')वास्तव में लौटता है 0.3333...। यह बात बताने के लिए धन्यवाद!
कैसे (के लिए char c)
int i = (int)(c - '0');
जो चार मूल्य का विकल्प है?
एपीआई सवाल (टिप्पणियाँ), शायद एक विस्तार विधि फिर से?
public static class CharExtensions {
public static int ParseInt32(this char value) {
int i = (int)(value - '0');
if (i < 0 || i > 9) throw new ArgumentOutOfRangeException("value");
return i;
}
}
तो उपयोग करें int x = c.ParseInt32();
int.Parseif (i < 0 || i > 9) throw new FormatException();
हर कोई जो भूल रहा है वह समझा रहा है कि ऐसा क्यों होता है।
एक चार, मूल रूप से एक पूर्णांक है, लेकिन ASCII तालिका में एक सूचक के साथ। सभी वर्णों का एक पूर्णांक मान होता है क्योंकि आप इसे पार्स करने का प्रयास करते समय स्पष्ट रूप से देख सकते हैं।
प्रणय का स्पष्ट रूप से एक अलग चरित्र सेट है, यही कारण है कि एचआईएस कोड काम नहीं करता है। एकमात्र तरीका है
int val = '1' - '0';
क्योंकि यह '0'तब तालिका में पूर्णांक मान को देखता है, तो इसके आधार पर चार्ट में आपके नंबर को घटाकर 'आधार मूल्य' आपको मूल संख्या प्रदान करेगा।
आप निम्नलिखित एक्सटेंशन विधि का उपयोग कर सकते हैं:
public static class CharExtensions
{
public static int CharToInt(this char c)
{
if (c < '0' || c > '9')
throw new ArgumentException("The character should be a number", "c");
return c - '0';
}
}
charकरना है intतो हमें इनपुट पैरामीटर की श्रेणी को जांचना होगा, आउटपुट intमान को नहीं।
intमूल्य की जांच करने की कोई आवश्यकता नहीं है क्योंकि विधि की शुरुआत में संख्यात्मक वर्णों की सीमा का प्रदर्शन किया गया था, इसलिए सही परिणामी मूल्य होगा, यदि निर्दिष्ट चार्ट संख्यात्मक वर्णों की सीमा में नहीं है तो फेंक दिया जाएगा अपवाद। आपके द्वारा प्रदान किए गए समान तर्क लेकिन रेंज की जाँच विधि की शुरुआत में की जाती है।
if (c < 0 || c > 9)...
इसे पूरा करने का सबसे सुरक्षित तरीका Int32.TryParse मेथड है। यहां देखें: http://dotnetperls.com/int-tryparse
int val = '1' & 15;
0-9 ASCII के बाइनरी को बाइनरी किया गया है:
0 - 00110000
1 - 00110001
2 - 00110010
3 - 00110011
4 - 00110100
5 - 00110101
6 - 00110110
7 - 00110111
8 - 00111000
9 - 00111001
और यदि आप उनमें से प्रत्येक में पहले 4 एलएसबी (बिटवाइज और 8'b00001111 का उपयोग करते हैं जो 15 के बराबर है) तो आपको वास्तविक संख्या मिलती है (0000 = 0,0001 = 1,0010 = 2, ...)
हेक्साडेसिमल प्रतिनिधित्व को कवर करने वाले कुछ अन्य उत्तरों का विस्तार:
public int CharToInt(char c)
{
if (c >= '0' && c <= '9')
{
return c - '0';
}
else if (c >= 'a' && c <= 'f')
{
return 10 + c - 'a';
}
else if (c >= 'A' && c <= 'F')
{
return 10 + c - 'A';
}
return -1;
}