2012-06-07 66 views
30
 
public void parse_table(BinaryReader inFile) 
{ 
    byte[] idstring = inFile.ReadBytes(6); 
    Console.WriteLine(Convert.ToString(idstring)); 
} 

這是一個簡單的片段:讀取文件的前6個字節並將其轉換爲字符串。C#:將字節數組轉換爲字符串並打印到控制檯

但是控制檯顯示System.Byte[]

也許我正在使用錯誤的類進行轉換。我應該使用什麼?它最終將解析以UTF-8編碼的文件名,並且我計劃使用相同的方法來讀取所有文件名。

回答

45

它實際上:

Console.WriteLine(Encoding.Default.GetString(value)); 

或UTF-8特異性:

Console.WriteLine(Encoding.UTF8.GetString(value)); 
+7

什麼如果你想打印字節? – pyCthon

+0

@pyCthon:你說這個問題是什麼意思? – lpapp

+2

@pyCthon如果您想打印出字節值,請查看[我的回答](http://stackoverflow.com/a/20011305/346561)。 –

27

我是在一個困境,其中我有一個簽署字節陣列(sbyte[])作爲輸入提供給測試類,我想用簡單的普通字節數組(byte[])替換它。我從谷歌搜索來到這裏,但湯姆的回答對我沒有用處。

我寫了一個輔助方法來打印出一個給定的byte[]的初始化:

public void PrintByteArray(byte[] bytes) 
{ 
    var sb = new StringBuilder("new byte[] { "); 
    foreach (var b in bytes) 
    { 
     sb.Append(b + ", "); 
    } 
    sb.Append("}"); 
    Console.WriteLine(sb.ToString()); 
} 

您可以使用它像這樣:

var signedBytes = new sbyte[] { 1, 2, 3, -1, -2, -3, 127, -128, 0, }; 
var unsignedBytes = UnsignedBytesFromSignedBytes(signedBytes); 
PrintByteArray(unsignedBytes); 
// output: 
// new byte[] { 1, 2, 3, 255, 254, 253, 127, 128, 0, } 

的輸出中是有效的C#,然後可以僅僅是複製到您的代碼中。

和公正的完整性,這裏是UnsignedBytesFromSignedBytes方法:

// http://stackoverflow.com/a/829994/346561 
public static byte[] UnsignedBytesFromSignedBytes(sbyte[] signed) 
{ 
    var unsigned = new byte[signed.Length]; 
    Buffer.BlockCopy(signed, 0, unsigned, 0, signed.Length); 
    return unsigned; 
} 
4

這僅僅是一個更新的傑西·韋伯夫婦代碼版本,不附加不必要的尾隨,字符。

public static string PrintBytes(this byte[] byteArray) 
{ 
    var sb = new StringBuilder("new byte[] { "); 
    for(var i = 0; i < byteArray.Length;i++) 
    { 
     var b = byteArray[i]; 
     sb.Append(b); 
     if (i < byteArray.Length -1) 
     { 
      sb.Append(", "); 
     } 
    } 
    sb.Append(" }"); 
    return sb.ToString(); 
} 

此方法的輸出是:

new byte[] { 48, ... 135, 31, 178, 7, 157 } 
3

我用這個簡單的代碼在我的代碼庫:

static public string ToReadableByteArray(byte[] bytes) 
{ 
    return string.Join(", ", bytes); 
} 

要使用:

Console.WriteLine(ToReadableByteArray(bytes)); 
相關問題