转换十六进制到二进制
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位的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。
通常我会用一个整数作为参数调用函数。有没有办法将int作为char *将其作为参数传递给hex2bin? – user1386132
如果你的参数是整数,只需使用第一个code.Call第一个hex2bin,试试看,没关系。 – Mazheng
我已经忘记了大多数的这些,但试图利用的无符号代替INT
不错的建议,但只有涉及的数量是负数时才会有所作为。 –
请不要在“C - ”等前加上标题。这就是标签的用途。 –
下面是用Java编写的等效函数:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/lang/Integer.java#Integer.toBinaryString%28int %29 –
你的正确输出(12位)对我来说似乎是错误的。如果你只需要12位,把i = 16更改为1 = 12 – kgiannakakis