2012-06-07 4 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[]) для простоты. Я приехал сюда из поиска 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 метода:

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

Это просто обновленная версия Jesse WEBBS коды, который не добавляет к ненужному трейлингу , характера.

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)); 
Смежные вопросы