short
配列をstring
に変換してから本文を表示できますか?短い配列を文字列に変換するC#
short[] a = new short[] {0x33, 0x65, 0x66, 0xE62, 0xE63};
utf16
(タイ文字)が配列に含まれています。どのように出力して、タイ語と英語の単語を表示できますか?
ありがとうございます。
short
配列をstring
に変換してから本文を表示できますか?短い配列を文字列に変換するC#
short[] a = new short[] {0x33, 0x65, 0x66, 0xE62, 0xE63};
utf16
(タイ文字)が配列に含まれています。どのように出力して、タイ語と英語の単語を表示できますか?
ありがとうございます。
これを試してみてください:
//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);
あなたは、このメソッドを使用して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);
私はBuffer.BlockCopyを使用してバイト配列に変換したでしょう – MrMoDoJoJr
良い点MrMoDoJoJr、投稿を編集しました。 – JustAnotherUserYouMayKnow
はこれを試してみてください。
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);
UTF8は、配列にUTF16文字があるとOPが示すため動作しません。 – itsme86
あなたのコードを使用すると、文字列ではなく文字列のリストが得られます。 – JustAnotherUserYouMayKnow
あなたはの配列を必要としますchar
。 には、1つを直接受け入れる過負荷があります。
char[] temp = new char[a.Length];
Array.Copy(a, temp, a.Length);
return new string(temp);
残念ながら、これはアレイ全体をコピーすることです。理論的には、いくつかのキャストトリックと安全でないコードを使用することでこれを避けることができますが、それは難しいでしょう。
理想的には他の人が触れたように、short[]
の代わりにchar[]
で始まるのが理想的です。たとえば、ファイルからロードする場合、見つけた番号をキャストした後にchar[]
に格納することができます。
私は少し皆の答えをオフにリッピングが、ここで同じことをやってのクリーンな方法ですよ:あなたは `short`配列で開始する*ている
short[] shorts = new short[] { 0x33, 0x65, 0x66, 0xE62, 0xE63 };
char[] chars = Array.ConvertAll(shorts, Convert.ToChar);
string result = new string(chars);
*ですか?代わりに 'char'配列で始めることができれば(各' char'は16ビットの符号なし整数です)、それはもっと簡単になります... –