2011-03-03 62 views
2

我試圖將字節數組轉換爲以逗號字符串分隔的字符數組。我只是想將de字節的值放入一個字符串中,所以我通過TCP向另一臺pc發送一個字符串。將字節數組轉換爲分隔字符串

這是我現在正在運行的代碼,它工作,但它太慢了(字節數組有50000個元素)。你有什麼更好的主意嗎?

謝謝。

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

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

這似乎是一種可怕的方式來完成你正在做的任何事情。如果你在每個文字字節之間放置一個逗號,那麼你的客戶端之間每一次通信的大小就會加倍。你能解釋一下你爲什麼這樣做嗎?也許我們可以幫助您找到解決問題的更好方法。 – 2011-03-03 14:54:33

+0

我只需要將一些數據的字符串發送到正在運行的服務。該字符串是這樣的:NAME | LASTNAME | SSNO | PHOTO其中PHOTO是字節數組轉換爲字符串 – NicoRiff 2011-03-03 15:24:59

回答

4

嘛,你從的ToString分配100000串(半()調用,一半中間的字符串)。你從來沒有聽說過字符串連接的危險,並且目的是StringBuilder

例如

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 */ 
+0

謝謝,這工作比其他解決方案快得多。 – NicoRiff 2011-03-03 15:06:23

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); 
+0

只需注意:這不會給出與OP代碼相同的輸出。 **但這很好,因爲字符串會比逗號分隔的十進制值列表小得多,並且它可以用於「通過TCP發送字符串到另一臺pc」。 – Justin 2011-03-03 14:54:19

2

當進行大量字符串操作時使用StringBuilder。 在這種特殊情況下,也可以使用的string.join:

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

對字符串使用StringBuilder它是更有效的CONCAT。

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(","); 
} 
0

您可以並行化循環並且並行處理陣列的不同區域並重新組合結果。和其他人一樣,使用StringBuilder。

相關問題