【问题标题】:C# Convert Byte Array with nulls to stringC# 将带空值的字节数组转换为字符串
【发布时间】:2011-03-19 14:07:59
【问题描述】:

全部,

我有一个关于将带有空值的字节数组转换为 C# 字符串的问题。 这是我想转换为字符串的字节数组的示例。 我希望得到一个值为 SHkV 的字符串

[0]: 83
[1]: 0
[2]: 72
[3]: 0
[4]: 75
[5]: 0
[6]: 86
[7]: 0

如何在 C# 中做到这一点?

谢谢, MK

【问题讨论】:

    标签: c# string encode


    【解决方案1】:

    假设 ASCII 字节,您可以使用 LINQ:

    new string(bytes.Where(b => b != 0).Select(b => (char)b).ToArray());
    

    但是,我怀疑您正在尝试破解 Unicode 数据。

    不要

    改为使用Encoding class

    【讨论】:

      【解决方案2】:
      string str = new ASCIIEncoding().GetString(bytes.Where(i => i != 0).ToArray());
      

      您也可以使用UnicodeEncodingUTF32EncodingUTF7EncodingUTF8Encoding

      【讨论】:

        【解决方案3】:

        您确实需要知道原始编码才能成功转换。

        我怀疑在这种情况下编码可能是UTF-16,您可以将其转换如下:

        byte[] yourByteArray = new byte[] { 83, 0, 72, 0, 75, 0, 86, 0 };
        
        string yourString = Encoding.Unicode.GetString(yourByteArray));
        
        Console.WriteLine(yourString);    // SHKV
        

        【讨论】:

          【解决方案4】:

          使用 Linq 语法:

          var chars = 
              from b in byteArray
              where b != 0
              select (char) b;
          
          string result = new String(chars.ToArray());
          

          尽管您最好选择正确的编码,正如其他人所建议的那样。

          【讨论】:

            【解决方案5】:

            这看起来像 little-endian UTF-16,所以:

            string s = Encoding.Unicode.GetString(data);
            

            【讨论】:

              【解决方案6】:

              您能保证始终看到这种编码的字符串(char、null、char、null 等)吗?如果是这样,您可以简单地使用 Unicode 字符串编码器对其进行解码:

                  Byte[] contents = new Byte[] {83, 0, 72, 0, 75, 0, 86, 0};
                  Console.WriteLine(System.Text.Encoding.Unicode.GetString(contents));
              

              【讨论】:

                【解决方案7】:

                字节[] b = 新字节[]{83,0,72,0,75,0,86,0};

                System.Text.Encoding.Unicode.GetString(b);

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2019-12-15
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-02-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-11-11
                  • 1970-01-01
                  相关资源
                  最近更新 更多