2013-06-24 43 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()); 
相关问题