将短数组转换为字符串C#

时间:2013-04-04 15:18:24

标签: c# utf-16

是否可以将short数组转换为string,然后显示文字?

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

数组中包含utf16个(泰国字符)。它如何输出并显示泰语和英语单词?

谢谢。

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:4)

我有点扯掉其他人的答案,但这是一种更清洁的方式做同样的事情:

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

答案 2 :(得分: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);

答案 3 :(得分:1)

您需要一个char的数组。 string有一个直接接受一个的重载。

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

不幸的是,这涉及复制整个阵列。理论上你可以通过使用一些铸造技巧和不安全的代码来避免这种情况,但这很棘手。

理想情况下,正如其他人所提到的那样,您应该从char[]而不是short[]开始。例如,如果您从文件加载,则可以在投射后将找到的数字存储到char[]

答案 4 :(得分: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);