0
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)应该打印出它们各自的二进制数。

4

2 回答 2

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 的确切二进制代码。

于 2012-05-10T07:57:58.330 回答
0

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

于 2012-05-10T06:13:21.587 回答