2012-05-10 2 views
0

Я пытаюсь преобразовать hex в bin. Если я вызываю биты (0x101), он печатает 00011, что, очевидно, неверно. Я уверен, что он в цикле for. Есть идеи??hex to bin in C

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

После того, как вы переносите последний 1 немного из n, становится нулевым, и ваш цикл прерывается, даже если есть биты слева дело.

И сделайте себе одолжение ... укажите свой код правильно. Это намного проще читать/отлаживать при правильном форматировании.

+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 прямо сейчас. Все еще не печатайте правильную вещь. – user1386132