【问题标题】:Error converting byte array to string in test在测试中将字节数组转换为字符串时出错
【发布时间】:2012-08-11 18:16:56
【问题描述】:

我一直在尝试进行以下测试

[Test]
public void Test()
{
    byte[] testArray = new byte[] { 1, 0, 0, 1 };

    string number = System.Text.Encoding.ASCII.GetString(testArray);

    Assert.That(number, Is.EqualTo("1001"));
}

我收到以下错误

String lengths are both 4. Strings differ at index 0.
Expected: "1001"
But was:  "\0\0"

这让我感到困惑,因为我将字节数组转换为字符串的生产代码使用了相同的方法,然后我注销了字符串,这正是我所期望的。

在这种情况下进行转换之前我应该​​对字节数组做些什么吗?

谢谢,尼尔

【问题讨论】:

  • 试试相反的System.Text.Encoding.ASCII.GetBytes("1001");。你会得到49,48,48,49 :)
  • 您是否尝试将字符串1001 转换为字节并检查结果?
  • 我想投赞成票仅仅是因为你正在使用测试!!!
  • 谢谢大家,点击时的全脸手掌时刻......

标签: c# string unit-testing bytearray type-conversion


【解决方案1】:

ASCII 中的字节 0 不是“0”而是一些转义字符。

这可能会解决您的问题;

byte[] testArray = new byte[] { 49, 48, 48, 49 };

【讨论】:

  • 这可能会有所帮助。 asciitable.com 注意字节 48 和 49 分别是字符 0 和 1。而字节 0 和 1 为 null 并且(标题开始)。
【解决方案2】:

使用您当前的代码,您将每个字节视为 ASCII 代码,0 的 ascii 代码应该是 48...

我怀疑你实际上想要(使用 Linq):

string number=string.Join('',testArray.Select(x=>x.ToString()).ToArray());

string number=System.Text.Encoding.ASCII.GetString(testArray.Select(x=>x+48).ToArray());   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多