按位异或运算符和字节数组
Bitwise XOR operator and byte arrays
我有如下一段代码:
byte[] S = new byte[256];
byte[] T = new byte[256];
for (int i = 0; i < 256; ++i) {
S[i] = (byte)i;
T[i] = 13;
}
int j = 0;
int i2 = 0;
while (i2 < 256) {
j = j + S[i2] + T[i2] & 255;
byte[] arrby = S;
int n2 = i2;
arrby[n2] = (byte)(arrby[n2] ^ S[j]);
byte[] arrby2 = S;
int n3 = j;
arrby2[n3] = (byte)(arrby2[n3] ^ S[i2]);
byte[] arrby3 = S;
int n4 = i2++;
arrby3[n4] = (byte)(arrby3[n4] ^ S[j]);
}
初始值为0,1,2,3,4,5...的S[]数组...
当程序到达行时:
arrby[n2] = (byte)(arrby[n2] ^ S[j]);
S[0] 将其值从“0”更改为“13”,我不明白为什么。
什么在修改 S[0] 值?正如我所见,'^' 只是进行比较并更改 arrby[n2] 的值,而不是 S[0]
的值
这里:
byte[] arrby = S;
您正在 arrby
指向 到 与 S. 相同的数组
然后:
arrby[n2] = (byte)(arrby[n2] ^ S[j]);
您正在更改该数组中的条目。
多田...
因此,解决方案是:如果您不想修改数组的内容,请确保您不创建指向该数组的 other 引用。例如,根据您的要求,您可以先将 S 中的数据 复制 到新创建的 arrby
数组中。
下面的代码行使 arrby
引用与 S
相同的已分配内存
byte[] arrby = S;
我有如下一段代码:
byte[] S = new byte[256];
byte[] T = new byte[256];
for (int i = 0; i < 256; ++i) {
S[i] = (byte)i;
T[i] = 13;
}
int j = 0;
int i2 = 0;
while (i2 < 256) {
j = j + S[i2] + T[i2] & 255;
byte[] arrby = S;
int n2 = i2;
arrby[n2] = (byte)(arrby[n2] ^ S[j]);
byte[] arrby2 = S;
int n3 = j;
arrby2[n3] = (byte)(arrby2[n3] ^ S[i2]);
byte[] arrby3 = S;
int n4 = i2++;
arrby3[n4] = (byte)(arrby3[n4] ^ S[j]);
}
初始值为0,1,2,3,4,5...的S[]数组...
当程序到达行时:
arrby[n2] = (byte)(arrby[n2] ^ S[j]);
S[0] 将其值从“0”更改为“13”,我不明白为什么。 什么在修改 S[0] 值?正如我所见,'^' 只是进行比较并更改 arrby[n2] 的值,而不是 S[0]
的值这里:
byte[] arrby = S;
您正在 arrby
指向 到 与 S. 相同的数组
然后:
arrby[n2] = (byte)(arrby[n2] ^ S[j]);
您正在更改该数组中的条目。
多田...
因此,解决方案是:如果您不想修改数组的内容,请确保您不创建指向该数组的 other 引用。例如,根据您的要求,您可以先将 S 中的数据 复制 到新创建的 arrby
数组中。
下面的代码行使 arrby
引用与 S
byte[] arrby = S;