7

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

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

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

谢谢你。

4

5 回答 5

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);
于 2013-04-04T15:24:11.153 回答
6

我稍微扯掉了其他人的答案,但这是做同样事情的一种更清洁的方法:

short[] shorts = new short[] { 0x33, 0x65, 0x66, 0xE62, 0xE63 };
char[] chars = Array.ConvertAll(shorts, Convert.ToChar);
string result = new string(chars);
于 2013-04-04T15:30:05.323 回答
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);
于 2013-04-04T15:20:04.817 回答
1

你需要一个数组charstring有一个直接接受一个的重载。

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

不幸的是,这涉及复制整个数组。从理论上讲,您可以通过使用一些强制转换技巧和不安全的代码来避免这种情况,但这会很棘手。

理想情况下,正如其他人所提到的,您将从 achar[]而不是 a开始short[]。例如,如果您从文件加载,您可以在转换char[]后将找到的数字存储到 a 中。

于 2013-04-04T15:28:00.847 回答
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);
于 2013-04-04T15:24:49.873 回答