2013-01-02 60 views
1

我已经编写了读取网络流并将数据存储到字节数组中的代码,然后将该字节数组转换为字符串数组。删除ASCII字符28从字符串数组

我想从字符串数组或直接从字节数组中删除不可打印的ASCII字符(代码28即文件分隔符)。

我该怎么做到这一点?

我尝试下面的代码:

saBytesReceived = saBytesReceived.Select(s => s.Replace(@"[^U+001C]", "")).ToArray(); 

代码: -

if (serverSocket.Connected) 
{ 
    bBytesToRead = serverSocket.Available; 

    if (bBytesToRead > 0) 
    { 
     try 
     { 
     bDataReceived = new byte[bBytesToRead]; 
     networkStream.Read(bDataReceived, 0, bBytesToRead); 
     try 
     { 
      if (System.Text.ASCIIEncoding.ASCII.GetString(bDataReceived).Trim() != "") 
      { 
       uncompletedMessage.IdleCount = 0;            
       saBytesReceived = System.Text.ASCIIEncoding.ASCII.GetString(bDataReceived).Split(new string[] { "\n" }, StringSplitOptions.None); 
       saBytesReceived = saBytesReceived.Select(s => s.Replace(@"[^U+001C]", "")).ToArray(); 
      } 
     } 
     } 
    } 
} 

回答

5

不知道的字节数组,但是从可以使用的与string.replace字符串。如果它的一个字符串:

string str = "1" + (char)(28) + "2"; 
//str.Length == 3 
str = str.Replace(((char)28).ToString(), ""); 
//str.Length == 2 

对于数组:

saBytesReceived = saBytesReceived.Select(s => s.Replace(((char)28).ToString(), "")).ToArray(); 
0

这是讨厌我一个十六进制字符串转换为UTF8字符串后,因为那时我似乎无法从数组取出空值。 @哈比布你演员和弦都做了伎俩。 TY。

public static string GetString(string hex) 
    { 
     byte[ ] raw = new byte[ hex.Length/2 ]; 
     for(int i = 0; i < raw.Length; i++) 
     { 
      byte convertToByte = Convert.ToByte(hex.Substring(i * 2, 2), 16); 
      raw[ i ] = convertToByte; 
     } 

     var result = Encoding.UTF8.GetString(raw).Replace(((char) 0).ToString(), ""); 

     return result; 
    }