2016-09-06 2 views
0

플로트 타입 배열을 암호화하고 같은 기능으로 다시 디코드하려고합니다. 웹에서 여러 스레드를 읽었지만 나에게 행복하게 해주는 해결책을 찾지 못했습니다. float-type-pointer를 char *에 캐스트하고 그 결과를 char 형식의 키로 XOR하려고 시도했습니다. 여기 내 인코딩 기능 :플로트 배열을 XOR로 암호화

const char* key = "mykey"; 
int keylen = sizeof(key)/sizeof(key[0]); 

void encodeData(float *data, int size) 
{ 
    int bytes = (int)(sizeof(float)/sizeof(char)); 

    for(int i=0; i<size; i++) 
    { 
     for(int j=0; j<bytes; j++) 
     { 
      data[i] = *(((char *)&data[i]) + j)^(key[(bytes*i)%keylen]); 
     } 
    } 
} 

컴파일 작동하지만 난 EN- 및 디코딩 후 같은 결과를 얻을 수 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+2

당신이 포인터에'sizeof' 사용, 당신은 그것이 가리키는 어떤 포인터의 크기를 얻을 수 없습니다. 'strlen'을 사용하여 문자열의 길이를 얻거나'key'를 배열로 만드십시오. –

+1

과제의 왼편이 잘못되었습니다. 'data (i) ='대신에'* ((char *) & data [i]) + j) = ' –

+1

또한 sizeof (char)는 C 표준 스펙에 의해 항상' 1 '. –

답변

1

는 고정 :

void encodeData(float *data, int size) 
{ 
    int bytes = (int)(sizeof(float)/sizeof(char)); 
    char *tmp = (char *) data; 
    for(int i=0; i<bytes*size; i++) 
    { 
     *(tmp+i) = *(tmp+i)^key[i%keylen]; 
    } 
    data = (float*) tmp; 
} 
+0

응답을 응답으로 게시하지 마십시오. 질문 본문을 업데이트로 표시하여 업데이트 할 수 있습니다. –

+0

@EugeneSh. 일반적으로, 그는 안됩니다 -하지만 이번에는 응답에도 해결책이 포함되어 있으므로 괜찮습니다, 그렇지 않아야합니까? – Aconcagua

+0

그러면 해결책 부분과 응답 부분으로 구분해야합니다. –

관련 문제