是否可以将short
数组转换为string
,然后显示文本?
short[] a = new short[] {0x33, 0x65, 0x66, 0xE62, 0xE63};
数组中有utf16
(泰文字符)包含。它如何输出和显示泰语和英语单词?
谢谢你。
您可以使用以下方法从 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);
我稍微扯掉了其他人的答案,但这是做同样事情的一种更清洁的方法:
short[] shorts = new short[] { 0x33, 0x65, 0x66, 0xE62, 0xE63 };
char[] chars = Array.ConvertAll(shorts, Convert.ToChar);
string result = new string(chars);
尝试这个:
//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);
你需要一个数组char
。string
有一个直接接受一个的重载。
char[] temp = new char[a.Length];
Array.Copy(a, temp, a.Length);
return new string(temp);
不幸的是,这涉及复制整个数组。从理论上讲,您可以通过使用一些强制转换技巧和不安全的代码来避免这种情况,但这会很棘手。
理想情况下,正如其他人所提到的,您将从 achar[]
而不是 a开始short[]
。例如,如果您从文件加载,您可以在转换char[]
后将找到的数字存储到 a 中。
尝试这个:
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);