Binary C中的六角到箱

Binary C中的六角到箱,binary,hex,Binary,Hex,我想把十六进制转换成二进制。如果我调用位(0x101),它将打印00011,这显然是错误的。我很确定它在循环中。有什么想法吗 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++){ -

我想把十六进制转换成二进制。如果我调用位(0x101),它将打印00011,这显然是错误的。我很确定它在循环中。有什么想法吗

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;
}
inthextobin(intn){
字符缓冲区[33];
如果(n==0){
putchar('0');
返回0;
}
char*cp=buffer+32;
*cp=0;
对于(int i=0;i>=i;
}
printf(cp);
返回0;
}

一旦将最后一个
1
位移出
n
,它将变为零,循环中止,即使还有位需要处理


帮你自己一个忙…正确地缩进你的代码。当它格式正确时,阅读/调试会容易得多。

那么我该如何解决这个问题呢?我是否将那一行移到其他地方?而不是
while(n)
,你应该为你想要转换的每一位做一个for()循环。例如
for(int i=0;i
for(int i=0;i>=i;}
这是我现在的for循环。仍然没有打印出正确的内容。