1

私はこの質問のアルゴリズムを利用しています: Convert List<boolean> to String (選択された答え)

BitArrayしかし、これが逆になったときの長さを扱っています。つまり、BitArray長さが 12 の場合、逆にすると、長さは 16 ではなく 12 にする必要があります。

文字列の結果にカウント情報を追加する必要があると想像できます。しかし、これが正しいかどうかはわかりません。同じ長さの同じ bitArray を取得するにはどうすればよいですか?

現在のコード:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    var values = new BitArray(12);
    values[0] = true;
    values[1] = true;
    values[2] = true;
    values[3] = true;
    values[4] = true;
    values[5] = true;
    values[6] = true;
    values[7] = true;
    values[8] = false;
    values[9] = true;
    values[10] = true;
    values[11] = false;

    var bytes = new byte[(values.Length + 7) / 8];
    values.CopyTo(bytes, 0);
    var result = Convert.ToBase64String(bytes);

    var bytes2 = Convert.FromBase64String(result);
    var values2 = new BitArray(12);

    for (int i = 0; i < values2.Count; i++)
    {
        var temp = bytes - 1;
    }
}
4

3 に答える 3

1

なぜそうしないのですか:

bool[] vals = new[]{false, true, false, true, false, true};

StringBuilder sb = new StringBuilder();
foreach(var b in vals){
    sb.Append(b ? "1" : "0");
}
sb.ToString(); 

// prints out "010101"

編集: 最初に bool[] を持っていたのか、BitArray を持っていたのかわかりませんでした。このメソッドは、BitArray に対しても同様です。

var values = new BitArray(12);
values[0] = true;
values[1] = true;
values[2] = true;
values[3] = true;
values[4] = true;
values[5] = true;
values[6] = true;
values[7] = true;
values[8] = false;
values[9] = true;
values[10] = true;
values[11] = false;

StringBuilder sb = new StringBuilder();
foreach(var b in values){
    sb.Append((bool)b ? "1" : "0");
}
sb.ToString();

// prints out "111111110110"
于 2013-01-07T18:33:45.033 に答える
0

0 のパディングを回避する方法はないと思います。配列を反転しようとすると問題になります。これを回避する方法は、数値を格納する変数を持つ独自の型を作成することだと思いますこれにより、リバースまたはその他の操作を行うときにパディングを無視するコードを実行できるようになります。

を実行する前にパディングされたビット数を保存し、実行values.CopyTo(bytes, 0);var bytes2 = Convert.FromBase64String(result);に適切なビット数でビットシフトを実行できます (パディングされたビットをトリミングするため)。

編集:

結果のbitarrayでビットシフトを行うことができます:

public static BitArray ShiftRight(this BitArray instance)
{
    return new BitArray(new bool[] { false }.Concat(instance.Cast<bool>().Take(instance.Length - 1)).ToArray());
}

( https://stackoverflow.com/a/7696793/1279594から取得)

于 2013-01-07T19:12:14.783 に答える
0

を使用して逆変換するConvert.FromBase64String()と、長さ2 バイト( 16 ビット) のバイト配列が得られます。ここで、最初に BitArray からバイト配列を作成したとき、変換された ByteArray の長さは 2 バイト、つまり16 ビットでしたが、実際の BitArray の長さは12 ビットでした。この事実は、長さ 16 のバイト配列を考慮して長さ 16 の BitArray を作成する基本的な実装ではなく、既知のものです。

于 2013-01-07T19:08:08.810 に答える