在C中的十六进制到二进制

时间:2012-05-10 04:29:05

标签: binary hex

我正在尝试将十六进制转换为bin。如果我调用位(0x101)它会打印00011,这显然是错误的。我很确定它在for循环中。任何想法??

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;
}

1 个答案:

答案 0 :(得分:2)

1的最后一位移出n后,它就会变为零,即使剩下的位还要处理,你的循环也会中止。

并帮自己一个忙...正确地缩进你的代码。它的格式正确,因此更容易阅读/调试。