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)
应打印出各自的二进制数。
答案 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