2015-05-14 4 views
0

Допустим, у меня есть массив байтов,Преобразование массива байтов в строку и разбить строку

Byte[] arr; 

Тогда я преобразовать массив в строку 1.

String inputString = ""; 
foreach (Byte b in arr) 
{ 
    if (b != 0) 
     inputString += (Char) b; 
    else inputString += " "; 
} 

Скажем, строка:

inputString = @"C:\Program Files\Test C:\Users\User A\AppData\Local\Temp C 32323 C:\Program Files\Test\Temp"; 

Я хочу, чтобы разбить на 4 строки, которые выглядят, как показано ниже:

C:\Program Files\Test \\position 0 = test folder 
C:\Users\User A\AppData\Local\Temp \\position 1 = windows temp folder 
C 32323 \\position 2 = a name. It can be C2313 or C 2312 or whatever string 
C:\Program Files\Test\Temp \\position 3 = temp for test folder 
\\ position can change by me... 

каждая строка между будет разделена пробелом , Это означает, что я могу использовать .Split (''). Однако, как вы знаете, некоторые из путей имеют промежуток между ними, например, «C: \ Program Files \ Test».

Как я могу получить значения, которые я хочу?

+1

Вы уверены, что у исходного 'byte []' не было '\ 0' между различными путями? Попробуйте изменить 'inputString + =" "' на 'inputString + =" | "' – xanatos

+1

подстроки 'C: \ Users \ User A \ AppData \ Local \ Temp' и' C 32323'? после шаблона, это должна быть папка 'C: \ Users \ User A \ AppData \ Local \ Temp C 32323', не так ли? – ASh

+0

@xanatos у него наверняка будет более одного \ 0 –

ответ

1

Попробуйте сделать это:

byte[] arr = ... 

string[] inputStrings = Encoding.GetEncoding("iso-8859-1").GetString(arr).Split('\0'); 

И увидеть результат.

+0

массив inputStrings содержит много пустых строк. –

+0

Попробуйте отправить массив результатов ... Я не могу отлаживать эту информацию. – xanatos

+0

@kingjia Вы можете опубликовать версию base64 'byte [] arr':' string arrToString = Convert.ToBase64String (arr) ' – xanatos

0

Вот мой ответ. Спасибо @xanatos за совет.

String inputString = ""; 
bool isRepeat = false; 
foreach (Byte b in arr) 
{ 
    if (b != 0) 
    { 
     inputString += (Char)b; 
     isRepeat = false; 
    } 
    else 
    { 
     if (!isRepeat) 
     { 
     inputString += "|"; 
     isRepeat = true; 
     } 
    }    
} 
Смежные вопросы