2013-04-04 3 views
7

पर शॉर्ट ऐरे कन्वर्ट करें short सरणी को string में परिवर्तित करना संभव है, फिर टेक्स्ट दिखाएं?स्ट्रिंग सी #

short[] a = new short[] {0x33, 0x65, 0x66, 0xE62, 0xE63}; 

हैं utf16 (थाई वर्ण) सरणी में शामिल हैं। यह थाई और अंग्रेजी शब्दों को कैसे आउटपुट और दिखा सकता है?

धन्यवाद।

+3

आप * एक 'short' सरणी के साथ शुरू करने के लिए * है? यदि आप इसके बजाय 'char' सरणी से शुरू कर सकते हैं (प्रत्येक 'char' एक 16-बिट हस्ताक्षरित पूर्णांक है) तो यह बहुत आसान होगा ... –

उत्तर

3

इस प्रयास करें:

//short[] a = new short[] {0x33, 0x65, 0x66, 0xE62, 0xE63}; 
char[] a = new char[] {0x33, 0x65, 0x66, 0xE62, 0xE63}; 
string s = new string(a); 

Console.WriteLine(s); 
+0

यह एक छोटा [] को स्ट्रिंग में परिवर्तित नहीं कर रहा है ... यह छोटा [] char [] के रूप में code_ को लिख रहा है और फिर _that_ को स्ट्रिंग में परिवर्तित कर रहा है। – Sepster

+1

@ सेप्स्टर: पूछताछ एक स्ट्रिंग चाहता है, जबकि उन्होंने कहा कि उन्हें एक छोटी [] की आवश्यकता है, वे महसूस नहीं कर सकते कि char यूटीएफ -16 का समर्थन करता है। – Guvante

+1

@ गुवेन्ते "क्या यह लघु सरणी को स्ट्रिंग में परिवर्तित करना संभव है" प्रश्न है। इस बात से असहमत नहीं है कि उत्तर उपयोगी है ... (यही कारण है कि मैंने डाउनवॉट नहीं किया है), लेकिन जैसा कि यह बैठता है, यह _ सवाल_ का जवाब नहीं देता है। – Sepster

10

आप इस पद्धति का उपयोग एक UTF16 बाइट सरणी से एक स्ट्रिंग प्राप्त कर सकते हैं:

System.Text.Encoding.Unicode.GetString(bytes) 

हालांकि, यह केवल एक बाइट सरणी स्वीकार करता है। तो अगर आप पहली बाइट के लिए अपने शॉर्ट्स को बदलने के लिए है:

var bytes = a.SelectMany(x => BitConverter.GetBytes(x)).ToArray(); 

या थोड़ा अधिक वर्बोज़ लेकिन बहुत अधिक कुशल कोड:

var bytes = new byte[a.Length * 2]; 
Buffer.BlockCopy(a, 0, bytes, 0, a.Length * 2); 
+0

मैं एक बाइट सरणी Buffer.BlockCopy – MrMoDoJoJr

+0

अच्छा बिंदु MrMoDoJoJr का उपयोग कर के लिए परिवर्तित होता है, मेरे पोस्टिंग संपादित किया है। – JustAnotherUserYouMayKnow

0

इस प्रयास करें:

short[] a = new short[] { 0x33, 0x65, 0x66, 0xE62, 0xE63 }; 
var contobyte = a.Select(b => (byte)b).ToArray(); 
var res = System.Text.Encoding.Unicode.GetString(contobyte); 
+0

यूटीएफ 8 काम नहीं करेगा क्योंकि ओपी ने कहा कि सरणी में यूटीएफ 16 वर्ण हैं। – itsme86

+0

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

1

आप की एक सरणी की जरूरत है charstring में एक अधिभार है जो एक को स्वीकार करता है।

char[] temp = new char[a.Length]; 
Array.Copy(a, temp, a.Length); 
return new string(temp); 

दुर्भाग्य से इसमें संपूर्ण सरणी की प्रतिलिपि शामिल है। आप कुछ कास्टिंग चाल और असुरक्षित कोड का उपयोग कर सैद्धांतिक रूप से इससे बच सकते हैं, लेकिन यह मुश्किल होगा।

आदर्श रूप से अन्य लोगों ने उल्लेख किया है, तो आप short[] के बजाय char[] से शुरू करेंगे। उदाहरण के लिए यदि आप किसी फ़ाइल से लोड हो रहे हैं, तो आप उन्हें कास्ट करने के बाद char[] में प्राप्त संख्याओं को स्टोर कर सकते हैं।

4

मैं थोड़ा हर किसी की उत्तर बंद फाड़ कर रहा हूँ, लेकिन यहाँ एक ही बात करने का एक क्लीनर तरीका है:

short[] shorts = new short[] { 0x33, 0x65, 0x66, 0xE62, 0xE63 }; 
char[] chars = Array.ConvertAll(shorts, Convert.ToChar); 
string result = new string(chars); 
संबंधित मुद्दे