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)
应该打印出它们各自的二进制数。
我不明白为什么 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 的确切二进制代码。
我已经忘记了其中的大部分,但尝试使用unsigned而不是int