1

私は私が働こうとしている次のテストを持っています

[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"

バイト配列を文字列に変換するプロダクションコードが同じメソッドを使用し、文字列をログアウトすると、それが期待どおりになるため、これは私を困惑させます。

この場合、変換を行う前にバイト配列に対して何かを行う必要がありますか?

ありがとう、ニール

4

2 に答える 2

3

ASCIIのバイト0は「0」ではなく、エスケープ文字です。

これでおそらく問題は解決します。

byte[] testArray = new byte[] { 49, 48, 48, 49 };
于 2012-08-15T12:52:37.580 に答える
0

現在のコードでは、各バイトを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());   
于 2012-08-15T12:54:50.133 に答える