2012-08-15 51 views
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" 

這讓我爲難,因爲我的生產將字節數組轉換爲字符串的代碼使用相同的方法,然後我註銷字符串,這是我所期望的。

在這種情況下,在做轉換之前,我應該對字節數組做些什麼嗎?

謝謝,尼爾

+0

只要嘗試反向'System.Text.Encoding.ASCII.GetBytes( 「1001」);'。你會得到'49,48,48,49' :) – 2012-08-15 12:52:18

+0

你是否試圖將字符串'1001'轉換爲字節並檢查結果? – HonkyTonk 2012-08-15 12:52:20

+0

@ L.B Bah,我太慢了。 ;) – HonkyTonk 2012-08-15 12:52:40

回答

3

字節0的ASCII不爲 「0」,但一些轉義字符。

這可能會解決您的問題;

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

這可能有幫助。 http://www.asciitable.com/通知字節48和49分別是字符0和1。而字節0和1是空的(標題開始)。 – CaffGeek 2012-08-15 12:55:51

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()); 
相關問題