1

我正在利用这个问题的算法:Convert List<boolean> to String (the selected answer)

但我正在处理BitArray反转时的长度。我的意思是如果我的BitArray长度是 12,当我反转它时,我需要长度为 12 而不是 16。

我可以想象我需要将计数信息添加到字符串结果中。但我不确定这是否正确。我怎样才能得到相同长度的相同 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);,您可以使用适当的位数进行位移(以修剪填充位)

编辑:

您可以对生成的位数组进行位移:

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 回答