2013-06-24 40 views
0

我想將一些比特合併爲一個。我有這樣的方法:將一個比特合併爲一個字符串

public BitArray Encode(string source) 
{ 
    List<bool> encodedSource = new List<bool>(); 

    for (int i = 0; i < source.Length; i++) 
    { 
     List<bool> encodedSymbol = this.Root.Traverse(source[i], new List<bool>()); 
     encodedSource.AddRange(encodedSymbol); 
    } 

    BitArray bits = new BitArray(encodedSource.ToArray()); 

    return bits; 
} 

它返回我0/1二進制位,現在我有這樣的代碼,以顯示我的輸出:

foreach (bool bit in encoded) 
{ 
    MessageBox.Show((bit ? 1 : 0) + ""); 
} 

現在我只是顯示爲每一個比特的MessageBox ,但我怎麼才能將所有的位串聯到一個MessageBox中,這可能是一個愚蠢的問題,但我無法圍繞它來包裹我的頭。

回答

5
var bitString = string.Concat(encoded.Select(bit => bit ? "1" : "0")) 
+0

謝謝你做到了! – user2022298

1

使用StringBuilder

StringBuilder tmp = new StringBuilder(encoded.Count) 
foreach (bool bit in encoded) 
{ 
    tmp.Append(bit ?"1": "0")); 
} 
MessageBox.Show(tmp.ToString()); 
+0

測試這也工作,感謝effo RT! – user2022298

+0

不客氣) –

1

這個可視化,你需要做什麼:

它基本上會槽的所有條目,並添加或者是「1」或「0」到列表中,取決於條目。

public static string ConcatList(List<bool> list) 
    { 
     StringBuilder builder = new StringBuilder(); 
     foreach (bool b in list) 
     { 
      builder.Append(b == true ? "1" : "0"; 
     } 
     return builder.ToString(); 
    } 
0

我的建議:

string bitString = string.Empty; 
foreach (bool bit in encodedSource) 
{ 
    bitString = string.Concat(bitString, (bit ? "1" : "0")); 
} 
+1

所有字符串連接的潛在性能問題。 'StringBuilder'的其他答案避免了這一點。 –

1

這裏有BitArray擴展方法應該做的伎倆:在你的代碼

public static class BitArrayExtensions 
{ 
    public static string ToBitString(this BitArray encoded) 
    { 
     if (encoded == null) 
     { 
      return string.Empty; 
     } 

     var sb = new StringBuilder(encoded.Count); 

     foreach (bool bit in encoded) 
     { 
      sb.Append(bit ? "1" : "0"); 
     } 

     return sb.ToString(); 
    } 
} 

用作這樣的:

MessageBox.Show(encoded.ToBitString()); 
相關問題