【问题标题】:Convert Short Array to String C#将短数组转换为字符串 C#
【发布时间】:2013-03-26 18:22:12
【问题描述】:

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

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

数组中包含utf16(泰语字符)。怎么输出和显示泰文和英文单词?

谢谢。

【问题讨论】:

  • short数组开始吗?如果你可以从 char 数组开始(每个 char 是一个 16 位无符号整数),那么它会简单得多......

标签: c# utf-16


【解决方案1】:

试试这个:

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 不起作用,因为 OP 说数组中有 UTF16 字符。
【解决方案2】:

您可以使用此方法从 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 转换为字节数组
【解决方案3】:

我稍微抄袭了其他人的答案,但这里有一种更简洁的方法来做同样的事情:

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

【讨论】:

    【解决方案4】:

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

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

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

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

    【讨论】:

      【解决方案5】:

      试试这个:

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

      【讨论】:

      • 这不是将 short[] 转换为字符串...它是 将 short[] 的代码 重写为 char[] 然后转换 那个到一个字符串。
      • @Sepster:提问者想要一个字符串,虽然他们说他们需要一个 short[],但他们可能没有意识到 char 支持 UTF-16。
      • @Guvante “是否可以将短数组转换为字符串”是个问题。不同意这个答案是有用的......(这就是我没有投反对票的原因),但就目前而言,它没有回答问题
      • @Sepster:但如果他没有真正的理由使用short,它确实解决了Fusionmate的问题...
      • @Guvante 我不反对。 如果他没有真正的理由使用short。 :-) 只是建议答案至少需要一些限定。
      猜你喜欢
      • 2016-02-03
      • 2023-03-28
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      相关资源
      最近更新 更多