gpt4 book ai didi

java - 按位异或运算符和字节数组

转载 作者:行者123 更新时间:2023-12-02 00:44:15 28 4
gpt4 key购买 nike

我有以下代码:

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]);
}

S[]数组,初始值为:0,1,2,3,4,5...

当程序到达该行时:

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]);

您正在更改该数组中的一个条目。

多田...

因此,解决方案是:如果您不想修改数组的内容,请确保不创建指向该数组的其他引用。例如,根据您的要求,您可以首先将 S 中的数据复制到新创建的 arrby 数组中。

关于java - 按位异或运算符和字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42091467/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com