我想将一些比特合并成一个。我有这个方法:
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中,这可能是一个愚蠢的问题,但我无法绕过它。
答案 0 :(得分:5)
var bitString = string.Concat(encoded.Select(bit => bit ? "1" : "0"))
答案 1 :(得分:1)
使用StringBuilder
StringBuilder tmp = new StringBuilder(encoded.Count)
foreach (bool bit in encoded)
{
tmp.Append(bit ?"1": "0"));
}
MessageBox.Show(tmp.ToString());
答案 2 :(得分: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();
}
答案 3 :(得分: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());
答案 4 :(得分:0)
我的建议:
string bitString = string.Empty;
foreach (bool bit in encodedSource)
{
bitString = string.Concat(bitString, (bit ? "1" : "0"));
}