Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将短数组转换为字符串C#_C#_Utf 16 - Fatal编程技术网

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

将短数组转换为字符串C#,c#,utf-16,C#,Utf 16,是否可以将short数组转换为string,然后显示文本 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}; st

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

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);
试试这个:

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);

您需要一个字符数组
char
string
有一个重载,它直接接受一个重载

char[] temp = new char[a.Length];
Array.Copy(a, temp, a.Length);
return new string(temp);
不幸的是,这需要复制整个阵列。理论上,您可以通过使用一些强制转换技巧和不安全的代码来避免这种情况,但这会很棘手


理想情况下,正如其他人所提到的,您可以从
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位无符号整数),那么它会简单得多…这不是将短[]转换为字符串。。。它正在将short[]的代码编写为char[],然后将其转换为字符串。@Sepster:询问者想要一个字符串,虽然他们说他们需要一个short[],但他们可能没有意识到char支持UTF-16。@Guvante“是否可以将short数组转换为字符串”是个问题。不反对答案是有用的。。。(这就是我没有投反对票的原因),但就目前而言,它并没有回答问题。@Sepster:但如果Fusionmate没有真正的理由使用
short
…@Guvante,它确实解决了Fusionmate的问题,我不反对。如果他没有真正的理由使用
short
:-)只是建议答案至少需要一些限定。UTF8不起作用,因为OP说数组中有UTF16个字符。我会使用Buffer.BlockCopy转换为字节数组