2008-10-27 5 views
93

int करने के लिए चार तो मैं सी # में एक चार है:सी #

char foo = '2'; 

अब मैं एक पूर्णांक में 2 प्राप्त करना चाहते हैं। मुझे लगता है कि Convert.ToInt32 चार की वास्तविक दशमलव मान देता है और न संख्या 2. निम्नलिखित काम करेगा:

int bar = Convert.ToInt32(new string(foo, 1)); 

int.parse केवल रूप में अच्छी तरह तारों पर काम करता है।

क्या सी # में कोई स्ट्रिंग बनाने के बिना चार से int में जाने के लिए कोई मूल कार्य नहीं है? मुझे पता है कि यह छोटा है लेकिन यह अजीब लगता है कि सीधे रूपांतरण करने के लिए कुछ भी मूल नहीं है।

उत्तर

91

दिलचस्प जवाब है, लेकिन डॉक्स अलग ढंग से कहते हैं:

उपयोग को GetNumericValue तरीकों एक Char उद्देश्य यह है कि एक अंकीय करने के लिए एक संख्या का प्रतिनिधित्व कन्वर्ट मान प्रकार। Parse और TryParse वर्ण को Char ऑब्जेक्ट में स्ट्रिंग में परिवर्तित करने के लिए TryParse का उपयोग करें। Char ऑब्जेक्ट को String ऑब्जेक्ट में कनवर्ट करने के लिए ToString का उपयोग करें।

http://msdn.microsoft.com/en-us/library/system.char.aspx

+0

आह! तो कुछ मूल है! अजीब है कि यह एक डबल देता है। मुझे यह जवाब बेहतर पसंद है। इस पर ध्यान दिलाने के लिए धन्यवाद। – KeithA

+60

@ केथा: इसके लिए दोबारा लौटने का एक कारण है: 'char.GetNumericValue ('¼')' 0.25 उत्पन्न करता है। यूनिकोड ... ;-) – Heinzi

+0

की खुशियों यह एक जवाब है कि वास्तविक सवाल है, Char.GetNumericValue ('o'), Char.GetNumericValue ('मौ') और किसी भी गैर संख्यात्मक चार हमेशा वापस आ जाएगी जवाब देता नहीं है -1 - जेरेमी Ruten मूल प्रश्न के मामले में सही जवाब –

103

यह किसी पूर्णांक पर यह परिवर्तित कर देंगे:

char foo = '2'; 
int bar = foo - '0'; 

यह काम करता है क्योंकि हर किरदार के आंतरिक रूप से एक नंबर का प्रतिनिधित्व करती है। वर्ण '0' को '9' लगातार संख्या का प्रतिनिधित्व कर रहे हैं, इसलिए संख्या 2.

+0

अधिक महत्वपूर्ण बात यह है कि इसे क्यों वोट दिया गया था? –

+0

यह काम करता है क्योंकि 0 48 है। – sontek

+3

डाउनवॉटिंग क्योंकि मैं केवल तंत्र देख सकता हूं, इरादा नहीं। –

22
char c = '1'; 
int i = (int)(c-'0'); 

में पात्रों '0' और '2' परिणामों के बीच अंतर खोजने और आप एक स्थिर विधि बाहर बना सकते हैं इसके बारे में:

static int ToInt(this char c) 
{ 
    return (int)(c - '0'); 
} 
58

किसी को भी इस

की तरह और भी बेहतर इस

int bar = int.Parse(foo.ToString()); 

तरह int.Parse() और int.TryParse() का उपयोग कर विचार किया है

int bar; 
if (!int.TryParse(foo.ToString(), out bar)) 
{ 
    //Do something to correct the problem 
} 

यह एक बहुत सुरक्षित है और त्रुटियों की संभावना कम

+0

बिल्कुल सही दृष्टिकोण। यदि आप गैर-इनपुट इनपुट फेंकना चाहते हैं तो दूसरा चुनें, दूसरा अगर आप कुछ और करना चाहते हैं। –

+0

यह एक सामान्य रूपांतरण विधि के लिए एक अच्छा तरीका है। एक तरफ के रूप में, इसका एक और उदाहरण है कि .NET ब्लूटवेयर को कैसे बढ़ावा देता है। (मेरा मतलब है कि ऑन-यूनिट-टेस्ट TryParse() और ToString() - आप व्यावहारिक रूप से नहीं कर सकते हैं)। – logout

+4

@logout no, यह एक उदाहरण है कि स्टैक ओवरव्लो पर एक जवाब ब्लूटवेयर को कैसे बढ़ावा देता है। यह वास्तव में अनावश्यक रूप से फूला हुआ है, और मुझे समझ में नहीं आता कि यह चार से '0'' घटाने के लिए बेहतर क्यों माना जाता है। –

8

यह

char x = '9'; // '9' = ASCII 57 

int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9 
+0

आपकी टिप्पणी का कहना है ' '9'' है, लेकिन अपने कोड है '9', जो संकलित नहीं होगा। – svick

7

डिफ़ॉल्ट रूप से आप यूनिकोड उपयोग करती हैं इसलिए मैं के दोषपूर्ण विधि

int bar = int.Parse(foo.ToString());

उपयोग करने का सुझाव हालांकि तहत संख्यात्मक मान ही कर रहे हैं की कोशिश करो अंकों और मूल लैटिन वर्णों के लिए।

-5

यह मेरे लिए काम किया:

int bar = int.Parse("" + foo); 
+5

'int.Parse (foo.ToString())' से अलग कैसे है, कम पठनीय होने के अलावा? – svick

2

यह एक पूर्णांक में धर्मान्तरित और यूनिकोड संभालती

CharUnicodeInfo.GetDecimalDigitValue('2')

आप अधिक here पढ़ सकते हैं।

0

मैं कॉम्पैक्ट फ्रेमवर्क 3.5 का उपयोग कर रहा हूं, और इसमें "char.Parse" विधि नहीं है। मुझे लगता है कि कनवर्ट क्लास का उपयोग करना बुरा नहीं है। (सी # के माध्यम से CLR देखें, जेफरी रिक्टर) ASCII वर्ण या यूनिकोड वर्ण के साथ

char letterA = Convert.ToChar(65); 
Console.WriteLine(letterA); 
letterA = 'あ'; 
ushort valueA = Convert.ToUInt16(letterA); 
Console.WriteLine(valueA); 
char japaneseA = Convert.ToChar(valueA); 
Console.WriteLine(japaneseA); 

वर्क्स

है कि तरीकों के कुछ के सभी

एंटोनियो

0

तुलना परिणाम के आधार पर जब चरित्र एक ASCII अंक नहीं है:

char c = '\n';        
Debug.Print($"{c & 15}");     // 10 
Debug.Print($"{c^48}");     // 58 
Debug.Print($"{c - 48}");     // -38 
Debug.Print($"{(uint)c - 48}");    // 4294967258 
Debug.Print($"{char.GetNumericValue(c)}"); // -1 
-3

मैंने कई जवाब देखा है लेकिन वे मुझे भ्रमित लग रहे हैं। क्या हम बस टाइप कास्टिंग का उपयोग नहीं कर सकते हैं।

पूर्व के लिए: -

int s; 
char i= '2'; 
s = (int) i; 
+1

यह चरित्र 2 के ASCII कोड वापसी होगी, नहीं मान 2 – cavpollo

+0

फिर कैसे char.GetNumericValue का उपयोग कर (यह एक डबल मान देता है) और कास्टिंग यह int करने के लिए के बारे में। – Learner

+0

हाँ, कि क्या @Chad ग्रांट के स्वीकार किए जाते हैं जवाब – cavpollo

0
char foo = '2'; 
int bar = foo & 15; 

ASCII charecters 0-9 की बाइनरी है:

0 - 00110000

1 - 00110001

2 - 00110010

3 - 00110011

4 - 00110100

5 - 00110101

6 - 00110110

7 - 00110111

8 - 00111000

9 - 00,111,001

और यदि आप उनमें से प्रत्येक को पहले 4 एलएसबी (बिटवाई का उपयोग करके और 8'00001111 के साथ 15 के बराबर करते हैं) में आपको वास्तविक संख्या (0000 = 0,0001 = 1,0010 = 2, ...) मिलती है

+2

का प्रस्ताव इस कोड स्निपेट [स्पष्टीकरण सहित] समाधान, हो सकता है (// meta.stackexchange.com/questions/114762/explaining-entirely- कोड आधारित-जवाब है) वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। – yivi

+0

@yivi टिप्पणी के लिए धन्यवाद, मैंने एक स्पष्टीकरण जोड़ा –