C#:conversione di array di byte in stringa e stampa su console

C#:conversione di array di byte in stringa e stampa su console

In realtà è:

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

o per UTF-8 in particolare:

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

Mi trovavo in una situazione difficile in cui avevo un firmato matrice di byte (sbyte[] ) come input per una classe Test e volevo sostituirlo con un normale array di byte (byte[] ) per semplicità. Sono arrivato qui da una ricerca su Google ma la risposta di Tom non mi è stata utile.

Ho scritto un metodo di supporto per stampare l'inizializzatore di un dato 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());
}

Puoi usarlo in questo modo:

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, }

L'output è un C# valido che può quindi essere semplicemente copiato nel codice.

E solo per completezza, ecco il UnsignedBytesFromSignedBytes metodo:

// 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;
}

Ho usato questo semplice codice nella mia codebase:

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

Per utilizzare:

Console.WriteLine(ToReadableByteArray(bytes));