0

いくつかのビットを1つに連結したい。私はこの方法を持っています:

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 を表示していますが、すべてのビットを 1 つの MessageBox に連結するにはどうすればよいですか。それはばかげた質問かもしれませんが、頭を包むことはできません。

4

5 に答える 5

5
var bitString = string.Concat(encoded.Select(bit => bit ? "1" : "0"))
于 2013-06-24T17:00:57.497 に答える
1

StringBuilder を使用する

StringBuilder tmp = new StringBuilder(encoded.Count)
foreach (bool bit in encoded)
{
    tmp.Append(bit ?"1": "0"));
}
MessageBox.Show(tmp.ToString());
于 2013-06-24T16:58:57.300 に答える
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();
    }
于 2013-06-24T17:02:59.287 に答える
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());
于 2013-06-24T17:16:24.803 に答える
0

私のおすすめ:

string bitString = string.Empty;
foreach (bool bit in encodedSource)
{
  bitString = string.Concat(bitString, (bit ? "1" : "0"));
}
于 2013-06-24T17:05:02.297 に答える