इंट में कैसे कन्वर्ट करें?


123

उचित तरीके से एक कन्वर्ट करने के लिए क्या है charकरने के लिए int? यह देता है 49:

int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works

मैं स्ट्रिंग में परिवर्तित नहीं करना चाहता और फिर इसे पार्स कर रहा हूं।


1
इस प्रश्न का संभावित डुप्लिकेट ।
RBT

जवाबों:


282

मुझे आश्चर्य है कि किसी ने भी सही में निर्मित स्थैतिक विधि का उल्लेख नहीं किया है System.Char...

int val = (int)Char.GetNumericValue('8');
// val == 8

18
अच्छी जगह! +1 बहुत अजीब है कि यह एक देता है double, हालांकि
मार्क Gravell

4
मैं सहमत हूं, मैं यह पता नहीं लगा सकता कि यह 'डबल' क्यों लौटाता है - एक एकल चरित्र संभवतः फ्लोटिंग-पॉइंट संख्या का प्रतिनिधित्व कैसे कर सकता है?
जोएल म्यूलर

49
कई यूनिकोड वर्ण हैं जो एक गैर-पूर्णांक संख्या का प्रतिनिधित्व करते हैं, उदाहरण के लिए, U + 2153
dtb

26
@dtb - मैंने ऐसा नहीं माना था। Char.GetNumericValue('⅓')वास्तव में लौटता है 0.3333...। यह बात बताने के लिए धन्यवाद!
जोएल मुलर

1
फुट नोट: यह फ़ंक्शन वर्तमान में नेटएमएफ में उपलब्ध नहीं है।
गिस्मोक्स

40

कैसे (के लिए 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();


1
मुझे उल्लेख करना चाहिए था, मुझे इस बारे में पता था लेकिन क्या कोई और तरीका है? मैं जानना चाहता था कि क्या ऐसा करने के लिए कोई एपीआई है?
टीवीएस

4
यदि आप एक int.Parseif (i < 0 || i > 9) throw new FormatException();
बहादुर से परिचित

@ user386338 मुझे डर है कि वहाँ नहीं है।
यूजीन चेवरडा

@ user386338 - साथ अद्यतन एक विकल्प फिर से एपीआई, भी शामिल है @ 0xA3 की प्रतिक्रिया
मार्क Gravell

@ user386338 - एक इनबिल्ट एपीआई विधि के लिए जोएल के जवाब देखने
मार्क Gravell

21

हर कोई जो भूल रहा है वह समझा रहा है कि ऐसा क्यों होता है।

एक चार, मूल रूप से एक पूर्णांक है, लेकिन ASCII तालिका में एक सूचक के साथ। सभी वर्णों का एक पूर्णांक मान होता है क्योंकि आप इसे पार्स करने का प्रयास करते समय स्पष्ट रूप से देख सकते हैं।

प्रणय का स्पष्ट रूप से एक अलग चरित्र सेट है, यही कारण है कि एचआईएस कोड काम नहीं करता है। एकमात्र तरीका है

int val = '1' - '0';

क्योंकि यह '0'तब तालिका में पूर्णांक मान को देखता है, तो इसके आधार पर चार्ट में आपके नंबर को घटाकर 'आधार मूल्य' आपको मूल संख्या प्रदान करेगा।


15
int i = (int)char.GetNumericValue(c);

फिर भी एक और विकल्प:

int i = c & 0x0f;

इसे भी पूरा करना चाहिए।


4
int val = '1' - '0';

यह एससीआई कोड का उपयोग करके किया जा सकता है जहां '0' सबसे कम है और संख्या वर्ण वहां से गिने जाते हैं


ये जबरदस्त है! यहाँ सबसे सुंदर समाधान imo।
अरबी

3
int val = '1' - 48;

@ ल्यूक जू: '0' में ASCII कोड 0x30 है, जो दशमलव में 48 है इसलिए यह '1' - '0' के समान है
NiKiZe

3

आप निम्नलिखित एक्सटेंशन विधि का उपयोग कर सकते हैं:

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';
        }
    }

1
@ 0xA3 श्रेणी की जाँच सामान्य रूप से विधि की शुरुआत में होनी चाहिए। शब्दार्थ यदि हमें परिवर्तित charकरना है intतो हमें इनपुट पैरामीटर की श्रेणी को जांचना होगा, आउटपुट intमान को नहीं।
यूजीन चेवरडा

परिणाम intमूल्य की जांच करने की कोई आवश्यकता नहीं है क्योंकि विधि की शुरुआत में संख्यात्मक वर्णों की सीमा का प्रदर्शन किया गया था, इसलिए सही परिणामी मूल्य होगा, यदि निर्दिष्ट चार्ट संख्यात्मक वर्णों की सीमा में नहीं है तो फेंक दिया जाएगा अपवाद। आपके द्वारा प्रदान किए गए समान तर्क लेकिन रेंज की जाँच विधि की शुरुआत में की जाती है।
यूजीन चेवरडा

क्षमा करें, मैं आपके कोड नमूने को गलत बता रहा था। कभी-कभी सबसे स्पष्ट चीजें देखना कठिन होता है। मैं शर्त लगाता हूं कि कोड ने कहा if (c < 0 || c > 9)...
डिर्क वोल्मार

1

इसे पूरा करने का सबसे सुरक्षित तरीका Int32.TryParse मेथड है। यहां देखें: http://dotnetperls.com/int-tryparse


TryParse वर्ण के लिए नहीं स्ट्रिंग्स के लिए है
TVR

हां यह है लेकिन रूपांतरण को पूरा करने का सबसे सुरक्षित तरीका है
MUG4N

1
किसी एकल वर्ण को पूर्णांक में बदलना सुरक्षा मामला है?
जोएल मुलर

1
इस मामले में 'सिक्योर' का मतलब है कि यह समस्या पैदा नहीं करेगा अगर आपका चार्ट वास्तव में एससीआई नंबर नहीं है - यह एक बहु-बाइट यूनिकोड चरित्र हो सकता है।
रॉबिन बेनेट

1
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, ...)


यह किस प्रकार से काम करता है? आप एक char और int के बीच एक बिटवाइज़र ऑपरेटर का उपयोग कर रहे हैं और फिर एक int लौटाते हैं? क्या तार्किक और दोनों चार और इंट के द्विआधारी प्रतिनिधित्व का उपयोग करता है और एक द्विआधारी प्रतिनिधित्व लौटाता है और फिर जैसा कि आप उस प्रतिनिधित्व का उपयोग करते हुए एक अंतर के रूप में var को परिभाषित कर रहे हैं?
mitomed

@mitnomed हाँ और यदि आप उदाहरण के लिए बाइट का उपयोग करते हैं तो यह बाइट प्रतिनिधित्व का उपयोग करता है।
तोमर वोलबर्ग

0

आप कुछ इस तरह की कोशिश कर सकते हैं:

int val = Convert.ToInt32("" + '1');

सिर्फ क्यों नहीं। TStString ()
वीकाडो

@ वेइकेडो वह एक इंट चाहता है, और एक स्ट्रिंग नहीं।
briba

6
मेरा मतलब हैConvert.ToInt32('1'.ToString())
Veikedo

0

हेक्साडेसिमल प्रतिनिधित्व को कवर करने वाले कुछ अन्य उत्तरों का विस्तार:

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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.