将hex转换为二进制

时间:2012-05-10 06:09:00

标签: c binary hex

int hex2bin (int n)
{
  int i,k,mask;
  for(i=16;i>=0;i--)
  {
    mask = 1<<i;
    k = n&mask;
    k==0?printf("0"):printf("1");
  }
  return 0;
}

我需要这个才能适用于我提供的任何十六进制作为输入。含义hex2bin(0x101)hex2bin(0x04)应打印出各自的二进制数。

2 个答案:

答案 0 :(得分:4)

我不明白为什么for循环从16到0。 如果你的操作系统中int为16位,     你应该将for循环从15设置为0, 否则如果你的操作系统中int是32位,     你应该将for循环从31设置为0。 所以代码是:

int hex2bin (int n)
{
  int i,k,mask;
  for(i=sizeof(int)*8-1;i>=0;i--)
  {
     mask = 1<<i;
     k = n&mask;
     k==0?printf("0"):printf("1");
  }
 return 0;
}

如果要显示任何输入(例如“0x10”,“0x4”),可以声明如下函数:

int hex2bin (const char *str)
{
char *p;
for(p=str+2;*p;p++)
{
    int n;
    if(*p>='0'&&*p<='9')
    {
        n=*p-'0';
    }
    else
    {
        n=*p-'a'+10;
    }
    int i,k,mask;
    for(i=3;i>=0;i--)
    {
        mask=1<<i;
        k=n&mask;
        k==0?printf("0"):printf("1");
    }

}
return 0;
}

然后,调用hex2bin(“0x101”)将得到确切的二进制代码0x101。

答案 1 :(得分:0)

我已经忘记了大部分内容,但尝试使用 unsigned 而不是 int