簡體   English   中英

C#:將字節數組轉換為字符串並輸出到控制台

[英]C#: Converting byte array to string and printing out to console

public void parse_table(BinaryReader inFile)
{
    byte[] idstring = inFile.ReadBytes(6);
    Console.WriteLine(Convert.ToString(idstring));
}

這是一個簡單的代碼段:讀取文件的前6個字節並將其轉換為字符串。

但是,控制台顯示System.Byte[]

也許我使用了錯誤的類進行轉換。 我應該使用什么? 最終它將解析以UTF-8編碼的文件名,而我計划使用相同的方法讀取所有文件名。

實際上是:

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

或專門針對UTF-8:

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

我處於困境中,我有一個帶符號的字節數組( sbyte[] )作為Test類的輸入,為了簡單起見,我想用普通的字節數組( byte[] )替換它。 我是通過Google搜索到達這里的,但是湯姆的答案對我沒有用。

我寫了一個輔助方法來打印出給定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 ,這是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;
}

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

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 }

我在代碼庫中使用了以下簡單代碼:

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

使用方法:

Console.WriteLine(ToReadableByteArray(bytes));
 byte[] bytes = { 1,2,3,4 };

 string stringByte= BitConverter.ToString(bytes);

 Console.WriteLine(stringByte);

對於linq和字符串插值的一些樂趣:

public string ByteArrayToString(byte[] bytes)
{
    if ( bytes == null ) return "null";
    string joinedBytes = string.Join(", ", bytes.Select(b => b.ToString()));
    return $"new byte[] {{ {joinedBytes} }}";
}

測試用例:

byte[] bytes = { 1, 2, 3, 4 };
ByteArrayToString( bytes ) .Dump();
ByteArrayToString(null).Dump();
ByteArrayToString(new byte[] {} ) .Dump();

輸出:

new byte[] { 1, 2, 3, 4 }
null
new byte[] {  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM