2015-05-14 93 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您可以发布'byte [] arr'的base64版本:'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; 
     } 
    }    
}