2011-02-15 5 views
15

स्ट्रिंग पर विचार करें।एक सी # स्ट्रिंग में एक चरित्र की ASCII मूल्य हो रही

+1

परिभाषित करें "सबसे कारगर"। :) इसके अलावा, संभावित डुप्लिकेट [सी # में स्ट्रिंग के ASCII मान कैसे प्राप्त करें] (http://stackoverflow.com/questions/400733/how-to-get-ascii-value-of-string-in-c)। इसके अलावा, क्या आप वास्तव में यहां ASCII का मतलब है? – bzlm

+5

खैर, तकनीकी रूप से, सी # वर्ण यूनिकोड का उपयोग करते हैं, ASCII नहीं। –

उत्तर

9

यहाँ एक विकल्प है, क्योंकि आप डाली int करने के लिए पसंद नहीं है:

foreach(byte b in System.Text.Encoding.UTF8.GetBytes(str.ToCharArray())) 
    Console.Write(b.ToString()); 
+0

यदि आप यूटीएफ 8 के बजाय ASCII का उपयोग करते हैं तो यह सही होना चाहिए .. अन्यथा आपको एएससीआई मान प्राप्त नहीं होंगे आपको यूटीएफ 8 मान मिलेगा ... – Peter

+1

@Petoj - यह सीधे एएससीआई में परिवर्तित होने पर एमएसडीएन दस्तावेज़ों से खींचा जाता है। "सही" तरीका 'ConvertToUTF32()' को कॉल करना होगा क्योंकि यह स्वयं वर्णों का सही एन्कोडिंग है। –

+1

इसे एमएसडीएन के रूप में खींचा जा सकता है लेकिन मैं आपसे सहमत नहीं हूं कि यह सही है, पहले एएससीआईआईआई में केवल 7 बिट वर्ण हैं और यूटीएफ 8 में बहुत कुछ है और दूसरा कुछ यूटीएफ 8 वर्ण 2 बाइट्स (या अधिक) के रूप में सहेजे गए हैं, इसलिए आप नहीं हैं यह निर्धारित करने में सक्षम है कि कौन सा char बाइट है और अधिक ... – Peter

18

बस एक पूर्णांक के लिए हर किरदार डाली:

for (int i = 0; i < str.length; i++) 
    Console.Write(((int)str[i]).ToString()); 
+1

यह एएससीआईआई तक सीमित नहीं होगा, है ना? – bzlm

+0

+1 - 'foreach (str.oCharArray() में char c का उपयोग करके पुनरावृत्त किया जा सकता है' –

+0

एकमात्र तरीका कास्टिंग कर रहा है? –

2

यह उदाहरण आपको मदद कर सकता है। सरल कास्टिंग का उपयोग करके आप urdu चरित्र के पीछे कोड प्राप्त कर सकते हैं।

string str = "عثمان"; 
     char ch = ' '; 
     int number = 0; 
     for (int i = 0; i < str.Length; i++) 
     { 
      ch = str[i]; 
      number = (int)ch; 
      Console.WriteLine(number); 
     } 
+0

क्योंकि 'स्ट्रिंग' यूटीएफ -16 कोड इकाइयों का एक अनुक्रमित अनुक्रम है (जिसमें से एक या दो यूनिकोड कोडपॉइंट एन्कोड करते हैं), यह यूटीएफ -16 कोड इकाइयां प्राप्त करेगा। कोडपॉइंट्स अधिक मानव पठनीय हैं। उनको प्राप्त करने के लिए, यूटीएफ -32 में कनवर्ट करें क्योंकि यूटीएफ -32 कोड इकाइयां और यूनिकोड कोडपॉइंट एक-से-एक हैं और समान मान हैं। –

0

यहां एक और विकल्प है। अगर इनपुट char ascii नहीं है तो यह आपको एक खराब परिणाम देगा। मैं यह परीक्षण किया PERF नहीं है, लेकिन मुझे लगता है कि यह बहुत तेजी से होगा:

[MethodImpl(MethodImplOptions.AggressiveInlining)] 
private static int GetAsciiVal(string s, int index) { 
    return GetAsciiVal(s[index]); 
} 

[MethodImpl(MethodImplOptions.AggressiveInlining)] 
private static int GetAsciiVal(char c) { 
    return unchecked(c & 0xFF); 
} 
संबंधित मुद्दे