在C#中将字节数组转换为字符串

7

有没有一种简单的方法将字节数组转换为字符串,以便通过以下单元测试?我找不到适用于所有值的编码。

  [TestMethod]
  public void TestBytToString()
  {
     byte[] bytArray = new byte[256];
     for (int i = 0; i < bytArray.Length; i++)
     {
        bytArray[i] = (byte)i;
     }
     string x = System.Text.Encoding.Default.GetString(bytArray);
     for (int i = 0; i < x.Length; i++)
     {
        int y = (int)x[i];
        Assert.AreEqual(i, y);
     }
  }

Array.ConvertAll 可以用于创建一个 char[],你可以将其传递给字符串构造函数。 - Ben Voigt
避免引起“你为什么要这样做?”的疑问,我认为这个操作有效的编码方式只可能是ASCII。 - JerKimball
Ascii 失败 预期:<128>,实际:<63> - user2227596
当我拿到你的代码并使用以下内容进行测试时,测试通过 string x = new string(bytArray.Select(Convert.ToChar).ToArray());感谢@Ricky - Mechanical Object
5个回答

1
string x = Encoding.UTF8.GetString(bytArray, 0, bytArray.Length);

当我使用上述代码时,出现了失败的情况,错误信息为:期望值为 <128>,实际值为 <65533>。 - user2227596

1

System.Text.Encoding.UTF8 可以为您解决问题。


如果不是UTF8呢? - It'sNotALie.
那么它是什么编码?如果它是ASCII,它仍然在UTF8的边缘,后者以缩小到必要大小而闻名。 - Tigran
当我使用UTF8时,它会失败,报错信息为:期望值:<128>,实际值:<65533>。 - user2227596

1
var str = System.Text.Encoding.Default.GetString(bytArray);

当我使用以上代码时,它失败了,期望值为<128>,实际值为<8364>。 - user2227596

0

这个有效:

  [TestMethod]
  public void TestBytToString()
  {
     byte[] bytArray = new byte[256];
     ushort[] usArray = new ushort[256];
     for (int i = 0; i < bytArray.Length; i++)
     {
        bytArray[i] = (byte)i;

     }

     string x = System.Text.Encoding.Default.GetString(bytArray);
     for (int i = 0; i < x.Length; i++)
     {
        int y = System.Text.Encoding.Default.GetBytes(x.Substring(i, 1))[0];
        Assert.AreEqual(i, y);
     }
  }

0
据我所知,在字节中,值大于127的所有内容都被视为负数。由于char只能取正值,因此在任何编码中,它都会导致未知字符的出现。
您可能希望将字节数组转换为无符号短整型(ushort),然后再转换为字符串...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接