我正在使用这个问题的算法:Convert List<boolean> to String(选择答案)
但是我正在处理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;
}
}
答案 0 :(得分: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"
答案 1 :(得分:0)
使用Convert.FromBase64String()
进行转换时,会得到一个长度 2个字节的字节数组, 16位。现在,当您从BitArray初始创建字节数组时,虽然转换的ByteArray的长度是2个字节,即 16位,但是,实际的BitArray长度 12位。这个事实是你知道的,而不是考虑长度为16的字节数组的底层实现,因此创建了长度为16的BitArray。
答案 2 :(得分: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());
}