2012-05-10 2 views
0

16 진수를 bin으로 변환하려고합니다. 내가 비트 (0x101)를 호출하면 00011이 인쇄되는데, 이것은 분명히 잘못되었습니다. 임 꽤 for 루프에 있습니다. 어떤 아이디어? 당신이 n에서 마지막 1 비트를 이동하면C에서 bin으로 16 진수

int hextobin (int n){ 
    char buffer[33]; 

    if(n==0) { 
     putchar('0'); 
     return 0; 
    } 

    char *cp = buffer + 32; 
    *cp = 0; 
    for(int i =0;i <=sizeof(n); i++){ 
     --cp; 
     if(n & 1) *cp = '1'; 
     else *cp = '0'; 
     n >>= i; 
    } 
    printf(cp); 
    return 0; 
} 

답변

2

, 그것은 제로가되고, 루프는 비트를 다루는 남아있을 경우에도 중단합니다.

그리고 자신에게 유리하게 굴복하십시오. 코드를 올바르게 들여 쓰기하십시오. 제대로 포맷되면 읽기/디버그하기가 훨씬 쉽습니다.

+0

어떻게 해결할 수 있습니까? 그 선을 다른 곳으로 옮기나요? – user1386132

+0

대신'while (n)'을 사용하면 변환 할 각 비트마다 for() 루프를 수행해야합니다. 예 : 'for (int i = 0; i <= sizeof (n); i ++)'또는 유사합니다. C에서 근무한 이후로 오랜 시간이 걸렸습니다. 그래도 작동하지 않을 것이지만 당신을 끌어들일 수있을만큼 충분해야합니다. –

+0

'for (int i = 0; i <= sizeof (n); i ++) { --cp; if (n & 1) * cp = '1'; else * cp = '0'; n >> = i; }'이것은 for for loop입니다. 여전히 옳은 것을 인쇄하지 않습니다. – user1386132