转换十六进制到二进制

问题描述:

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

请不要在“C - ”等前加上标题。这就是标签的用途。 –

+0

下面是用Java编写的等效函数:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/lang/Integer.java#Integer.toBinaryString%28int %29 –

+0

你的正确输出(12位)对我来说似乎是错误的。如果你只需要12位,把i = 16更改为1 = 12 – kgiannakakis

我不明白,为什么for循环是从16到0 如果int是16位的OS, 你应该设置为循环从15到0, 否则,如果int是在OS 32位, 你应该设置从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; 
} 

如果你想显示任何输入(如“0×10”,“为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。

+0

通常我会用一个整数作为参数调用函数。有没有办法将int作为char *将其作为参数传递给hex2bin? – user1386132

+0

如果你的参数是整数,只需使用第一个code.Call第一个hex2bin,试试看,没关系。 – Mazheng

我已经忘记了大多数的这些,但试图利用的无符号代替INT

+1

不错的建议,但只有涉及的数量是负数时才会有所作为。 –