2013-04-04 14 views
7

E 'possibile convertire l'array short in string, quindi mostrare il testo?Converti Short Array in String C#

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

Ci sono utf16 (caratteri Thai) contiene nella matrice. Come può produrre e mostrare le parole tailandesi e inglesi?

Grazie.

+3

Ti * hai * di iniziare con una matrice 'short'? Se si potesse iniziare con una matrice 'char' invece (ogni' char' è un intero senza segno a 16 bit) sarebbe molto più semplice ... –

risposta

3

Prova questo:

//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

Non si sta convertendo un breve [] in una stringa ... è _re-scrivere il codice_ per il corto [] come char [] e quindi convertire _that_ in una stringa. – Sepster

+1

@Sepster: il richiedente richiede una stringa, mentre ha detto che è necessario un breve [], potrebbe non rendersi conto che il char supporta UTF-16. – Guvante

+1

@Guvante "È possibile convertire un array breve in una stringa" è la domanda. Non è in disaccordo sul fatto che la risposta sia utile ... (che è il motivo per cui non ho downvoted), ma poiché si trova, non risponde alla domanda_. – Sepster

10

È possibile ottenere una stringa da un array di byte UTF16 con questo metodo:

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

Tuttavia, questo accetta solo un array di byte. Quindi, è necessario prima di trasformare i pantaloncini per byte:

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

o leggermente più prolisso ma il codice molto più efficiente:

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

Mi sarei convertito in un array di byte utilizzando Buffer.BlockCopy – MrMoDoJoJr

+0

Buon punto MrMoDoJoJr, ho modificato il mio post. – JustAnotherUserYouMayKnow

0

provare questo:

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

UTF8 non funzionerà perché l'OP ha detto che ci sono caratteri UTF16 nella matrice. – itsme86

+0

E usando il tuo codice ottieni una lista di stringhe, non una stringa. – JustAnotherUserYouMayKnow

1

è necessario una serie di char. string ha un sovraccarico che ne accetta uno direttamente.

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

Sfortunatamente ciò comporta la copia dell'intero array. Potresti teoricamente evitarlo usando alcuni trucchetti e codice non sicuro, ma sarebbe complicato.

Idealmente come altri hanno menzionato, si dovrebbe iniziare con uno char[] anziché uno short[]. Ad esempio, se stai caricando da un file, puoi memorizzare i numeri che trovi in ​​un char[] dopo averli rilanciati.

4

che sto un po 'strappando le risposte di tutti gli altri, ma qui è un modo pulito di fare la stessa cosa:

short[] shorts = new short[] { 0x33, 0x65, 0x66, 0xE62, 0xE63 }; 
char[] chars = Array.ConvertAll(shorts, Convert.ToChar); 
string result = new string(chars);