将字节数组转换为分隔的字符串

时间:2011-03-03 14:45:57

标签: c# arrays

我正在尝试将字节数组转换为以逗号字符串分隔。我只想将de bytes的值转换为字符串,以便我通过TCP将字符串发送到另一台PC。

这是我正在运行的代码,它正在运行,但它太慢了(字节数组有50000个元素)。你有更好的主意吗?。

感谢。

byte[] bytes = (byte[])dt.Rows[0]["LNL_BLOB"];
string foto="";

foreach (byte b in bytes)
{
   foto = foto + "," + b.ToString();
}

5 个答案:

答案 0 :(得分:4)

您可以使用Convert.ToBase64String而不是自己迭代字节。

byte[] data = // whatever you do to get the bytes
string sData = Convert.ToBase64String(data);

Here是方法文档。

当你想从字符串中取回你的字节数组时,只需使用Convert.FromBase64String ala

byte[] imageData = Convert.FromBase64String(sData);

答案 1 :(得分:4)

好吧,你要分配100000个字符串(一半来自ToString()调用,一半来自中间字符串)。您是否从未听说过字符串连接的危险以及StringBuilder的目的?

E.g。

byte[] bytes = (byte[])dt.Rows[0]["LNL_BLOB"];
System.Text.StringBuilder foto=new System.Text.StringBuilder();

foreach (byte b in bytes)
{
   foto.AppendFormat(",{0}",b);
}
return foto.ToString(); /* Or however you're using your string now */

答案 2 :(得分:4)

执行大量字符串操作时使用StringBuilder。 在这种特殊情况下,您还可以使用string.Join:

string foto = string.Join(",", bytes);

答案 3 :(得分:1)

使用StringBuilder,它可以更有效地连接字符串。

byte[] bytes = (byte[])dt.Rows[0]["LNL_BLOB"];
StringBuilder foto = new StringBuilder();

for(int i = 0; i < bytes.Length; i++) {
  foto.Append(bytes[i].ToString());

  if (i != (bytes.Length - 1)) foto.Append(",");
}

答案 4 :(得分:0)

您可以并行化循环并并行处理阵列的不同区域并重新组合结果。而且,正如其他人所提到的,使用StringBuilder。