2017-03-18 1 views
0

에 난 함수 intToBits 의해 비트 배열에 문자를 변환 코드의 다음 부분을 만들었다 :C : 샤아 비트 인쇄

typedef unsigned char poly8; 
typedef unsigned long long poly8x64[8]; 

char* intToBits(unsigned k) { 
    int i; 
    char *nk = malloc(8); 
    for(i=7;i>=0;i--){   
     nk[i] = (k%2);   
     k = (int)(k/2); 
     printf("nk= %d \n", nk[i]); 
    } 
    return *nk; 
} 

void poly8_bitslice(poly8x64 r, const poly8 x[64]) 
{ 
    //TODO 
    int i; 
    for(i=0;i<64;i++) 
    { 
     printf("x= %d \n", x[i]); 
     char* mem = intToBits(x[i]); 
     printf("bufer= %d \n", *mem);; 
    } 
} 

int main() 
{ 

    poly8 a[64], b[64], r[64]; 
    poly8x64 va, vb, vt; 
    int i; 

    FILE *urandom = fopen("/dev/urandom","r"); 
    for(i=0;i<64;i++) 
    { 
    a[i] = fgetc(urandom); 
    b[i] = fgetc(urandom); 
    } 

    poly8_bitslice(va, a); 
    poly8_bitslice(vb, b); 

    fclose(urandom); 
    return 0; 
} 

단, I는 분할 failt 오차를 얻고, 인쇄 중에. 나는 무엇을 해야할지 모른다. 포인터가 올바르지 않습니까? 난 그냥 intToBits의 결과를 인쇄하고 싶다.

return *nk; 

그것은 컴파일러는 컴파일러 경고를 켤 경우를 알려 것 대신 char*char을 반환

+1

당신은 bytes'하지'bits'은 ... 배열에 대한 형식 정의 사용 –

+0

이 IMO, – Jerfov2

+0

참 끔찍한 생각이지만,'할당 세그먼트 오류 – Ceesz

답변

2

범인은 intToBits에서이 라인입니다.

변경 그것에 :

return nk; 
+0

레코드의 경우, 그 라인에 대한'gcc' 경고는 "경고 : 리턴은 캐스트없이 정수로부터 포인터를 만듭니다"... "정수"는'* nk'의'char' 값입니다. –