2013-07-24 154 views
5

有沒有簡單的方法將字節數組轉換爲字符串,以便下列單元測試通過?我找不到適用於所有值的編碼。將字節數組轉換爲C#中的字符串

[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); 
    } 
    } 
+0

'Array.ConvertAll'應該創建一個'字符工作[]',你可以傳遞給一個字符串構造函數。 –

+0

避免了「你爲什麼要這麼做?」問題,這個操作唯一的編碼將是ASCII,我想。 – JerKimball

+0

失敗的Ascii預計:<128>,實際:<63> – 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); 
    } 
    } 
1

System.Text.Encoding.UTF8應該爲你做一個技巧。

+0

如果它不是UTF8會怎麼樣? –

+0

那麼它是什麼編碼?如果它是一個ASCII,它仍然在UTF8,這是著名的萎縮爲所需大小的邊緣。 – Tigran

+0

當我使用UTF8時,它失敗,預期:<128>,實際:<65533>。 – user2227596

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

當我使用上面的代碼時,它失敗,出現預期的結果:<128>,Actual:<65533>。 – user2227596

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

當我使用上述失敗時,預期:<128>,實際:<8364> – user2227596

0

據我所知寄託都在上面字節值127被認爲是負數和焦炭只能取正值它與你採取的每一個編碼字符未知的結果。

您可能希望將字節數組無符號短(USHORT)轉換,然後串...

相關問題