2013-04-04 21 views
7

short配列をstringに変換してから本文を表示できますか?短い配列を文字列に変換するC#

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

utf16(タイ文字)が配列に含まれています。どのように出力して、タイ語と英語の単語を表示できますか?

ありがとうございます。

+3

*ですか?代わりに '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 []として書いてから_that_を文字列に変換しています。 – Sepster

+1

@Sepster:Askerは短い文字列が必要だと言っている間に文字列を求めていますが、charがUTF-16をサポートしていることに気付かないかもしれません。 – Guvante

+1

@Guvante "短い配列を文字列に変換することは可能ですか"という質問です。答えが有用であることに同意しないでください...(これは私がなぜ落としていないのか)ですが、座っているときには答えません。 – 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

UTF8は、配列にUTF16文字があるとOPが示すため動作しません。 – itsme86

+0

あなたのコードを使用すると、文字列ではなく文字列のリストが得られます。 – JustAnotherUserYouMayKnow

1

あなたはの配列を必要としますchar。 には、1つを直接受け入れる過負荷があります。

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

残念ながら、これはアレイ全体をコピーすることです。理論的には、いくつかのキャストトリックと安全でないコードを使用することでこれを避けることができますが、それは難しいでしょう。

理想的には他の人が触れたように、short[]の代わりにchar[]で始まるのが理想的です。たとえば、ファイルからロードする場合、見つけた番号をキャストした後にchar[]に格納することができます。

4

私は少し皆の答えをオフにリッピングが、ここで同じことをやってのクリーンな方法ですよ:あなたは `short`配列で開始する*ている

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