位数组 return 初始值相同
Bitarray return same initial value
我需要制作一个 BitArray 序列(即链接 BitArray,每个值都取决于先前的值)
我还需要单独操作 BitArray 数组中每个元素的每一位。
我有这段代码(注意 desion 的功能以正确的方式工作)
BitArray[] sub_keys=new BitArray[10000];
for (int i = 0; i < sub_keys.Length; i++)
sub_keys[i] = b;
for (int i = 1; i < sub_keys.Length; i++)
for (int j = 1; j <119; j += 8)
{
{
sub_keys[i].Set(j, desion_105(sub_keys[i - 1], j));
sub_keys[i].Set(j + 1, desion_150(sub_keys[i - 1], j + 1));
sub_keys[i].Set(j + 2, desion_151(sub_keys[i - 1], j + 2));
sub_keys[i].Set(j + 3, desion_152(sub_keys[i - 1], j + 3));
sub_keys[i].Set(j + 4, desion_153(sub_keys[i - 1], j + 4));
sub_keys[i].Set(j + 5, desion_154(sub_keys[i - 1], j + 5));
sub_keys[i].Set(j + 6, desion_155(sub_keys[i - 1], j + 6));
sub_keys[i].Set(j + 7, desion_156(sub_keys[i - 1], j + 7));
}
}// for j end
}//for i end
desion函数段是(都一样)
public bool desion_150(BitArray ba, int index)
{
bool result;
........................// rest of code
return result;
}
我的问题是 sub_keys 总是 return 相同的值(初始种子 (b))。
我试图修复代码但我失败了,谁能告诉我问题出在哪里??!
BitArray 是引用类型。您的初始化循环一遍又一遍地使用同一个实例,因此它们都将指向同一个对象实例。
而不是
for (int i = 0; i < sub_keys.Length; i++)
sub_keys[i] = b;
尝试
for (int i = 0; i < sub_keys.Length; i++)
sub_keys[i] = new BitArray(b);
...这将为每个元素分配一个单独的新实例。通过将 b
传递给构造函数,您将新实例设置为 b
的副本,我相信这是您的预期行为。
我需要制作一个 BitArray 序列(即链接 BitArray,每个值都取决于先前的值)
我还需要单独操作 BitArray 数组中每个元素的每一位。
我有这段代码(注意 desion 的功能以正确的方式工作)
BitArray[] sub_keys=new BitArray[10000];
for (int i = 0; i < sub_keys.Length; i++)
sub_keys[i] = b;
for (int i = 1; i < sub_keys.Length; i++)
for (int j = 1; j <119; j += 8)
{
{
sub_keys[i].Set(j, desion_105(sub_keys[i - 1], j));
sub_keys[i].Set(j + 1, desion_150(sub_keys[i - 1], j + 1));
sub_keys[i].Set(j + 2, desion_151(sub_keys[i - 1], j + 2));
sub_keys[i].Set(j + 3, desion_152(sub_keys[i - 1], j + 3));
sub_keys[i].Set(j + 4, desion_153(sub_keys[i - 1], j + 4));
sub_keys[i].Set(j + 5, desion_154(sub_keys[i - 1], j + 5));
sub_keys[i].Set(j + 6, desion_155(sub_keys[i - 1], j + 6));
sub_keys[i].Set(j + 7, desion_156(sub_keys[i - 1], j + 7));
}
}// for j end
}//for i end
desion函数段是(都一样)
public bool desion_150(BitArray ba, int index)
{
bool result;
........................// rest of code
return result;
}
我的问题是 sub_keys 总是 return 相同的值(初始种子 (b))。 我试图修复代码但我失败了,谁能告诉我问题出在哪里??!
BitArray 是引用类型。您的初始化循环一遍又一遍地使用同一个实例,因此它们都将指向同一个对象实例。
而不是
for (int i = 0; i < sub_keys.Length; i++)
sub_keys[i] = b;
尝试
for (int i = 0; i < sub_keys.Length; i++)
sub_keys[i] = new BitArray(b);
...这将为每个元素分配一个单独的新实例。通过将 b
传递给构造函数,您将新实例设置为 b
的副本,我相信这是您的预期行为。