我需要将(来自std.bitmanip的) BitArray一分为二。到目前为止,我发现切片没有实现,在它上面迭代,并附加或赋值总是产生范围外的异常。我尝试将它转换成其他类型(它适合长整型/乌龙型),但这似乎太麻烦了,而且当我尝试初始化新的BitArrays时,它也给了我一个超出范围的异常,如下所示:
BitArray[] C, D;
long lg = toLong(bitArr);
C[0].init(cast(void[])((lg >> 28) & 0x0fff_ffff), 28);我的问题有没有更简单的解决方案?如果不是,我做错了什么?
发布于 2011-06-25 00:08:31
用天真的方式做有什么错呢?
BitArray A, B, C;
A = /* ... */
// Split A into B & C
auto n = A.length;
B.length = n/2;
foreach (i; 0..n/2)
B[i] = A[i];
C.length = n - n/2;
foreach (i; n/2..n)
C[i-n/2] = A[i];我在一个小的测试用例上尝试了一下,它对我来说工作得很好。
您的代码不能工作的原因是因为数组C的长度为零,因此访问C[0]是非法的。您需要首先添加一个空的BitArray。
C ~= BitArray();或者,使用静态数组:
BitArray[1] C, D;注意:如果您不需要保留原始数组,那么您可以使用以下命令将其一分为二:
A.length /= 2;当然,您需要先复制后半部分。
https://stackoverflow.com/questions/6469045
复制相似问题