2009-04-25 3 views
1

Я очень растерялся, когда дело доходит до байтового разговора.C# Байт-конвертации

мне нужно сделать два convertions:

1.We имеют байт [] массив {0x30, 0x31, 0x32, 0x33, 0x34, 0x35};

Как преобразовать его в строку, чтобы получить «30 31 32 33 34 35».

2.We имеют тот же байт [] массив

Теперь мне нужно, чтобы преобразовать его в ASCII (0x30 = 0, 0x31 = 1, 0x32 = 2 и так далее)

Когда это сделано, я должен получите «».

Как сделать оба конверта?

ответ

6
var bytearr = new byte[] { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35 }; 
var str = bytearr.Select(x => x.ToString("x2")); 
var ascii = bytearr.Select(x => (char)x); 

Если вы хотите, выход как один string (в отличие от IEnumerable с), вы можете сделать:

var str = String.Join(" ", bytearr.Select(x => x.ToString("x2")).ToArray()); 
var ascii = new string(bytearr.Select(x => (char)x).ToArray()); 
+2

Вам нужен ToString() в том, что второй уступке ASCii Я думаю уаг = ASCII string.join ("", bytearr.Select (х => ((Char) х) .ToString()). ToArray()); –

+0

@Steve: Спасибо, что указали это. Я слепо копировал их сверху и забыл сделать это;) Я переключился на лучший подход ('new string (char [])') –

0
  1. Это форматировать число как шестнадцатеричное с пробелами между:

    string r1 = String.Join ("", array.Select (n => n.ToString ("x2")). ToArray());

  2. Это преобразует байты в ASCII:

    строка r2 = Encoding.ASCII.GetString (массив);

Смежные вопросы