2017-02-07 11 views
2

I 코드의 다음 부분을 가지고비트 단위 XOR 연산자 바이트 배열

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]이 '13'에서 '0'의 값을 변경하고, I 이유를 이해할 수있다 : 프로그램 광고 도달

. S [0] 값을 수정하는 것은 무엇입니까? 나는이 '^'단지가 아니라 S의 비교를하고 arrby [N2]의 값을 변화를 보듯이 [0] 여기

+4

S 같은'바이트 [] = arrby S] '-'와 'S' 동일한 배열을 참조 arrby'. – Eran

+1

그 외에도 : 당신의 이름은 다소 끔찍합니다. 변수가 무엇인지에 대해서는 아무 말도하지 않습니다. 또한 배열 전체의 길이를 "철자"하는 것은 매우 끔찍합니다. theArray.length를 사용하거나 적어도 SOME_CONSTANT = 255를 사용하는 것이 좋습니다. – GhostCat

+0

'byte [] arrby = S' - 이것은 ** S의 복사본을 생성하지 않고 ** arrby에 저장합니다. 참조를 복사합니다. 즉, 두 변수가 동일한 객체를 참조합니다. 'arrby'를 수정하면'S'도 수정하고, 반대로 수정합니다. – BackSlash

답변

6

:

byte[] arrby = S; 

당신이 arrby하고 있습니다

이어서 S.와 같은 배열 :

arrby[n2] = (byte)(arrby[n2]^S[j]); 

당신은 내가 엔트리를 변경 그 배열.

타다 ...

그래서, 솔루션입니다 : 당신이 당신의 배열의 내용을 수정하지 않으려면, 당신은 그 배열을 가리키는 다른 참조를 생성하지 않도록해야합니다. 요구 사항에 따라 예를 들어 의 데이터를 S에서 새로 만든 arrby 배열로 먼저 복사 할 수 있습니다.

0

코드 라인 아래에 동일 할당 된 메모리 refference arrby하게

byte[] arrby = S;