void main()
{
char c[16]
int a[16][4]={0}
int i=0,j
scanf("%s",c)---->>以字符串形式输入
while(c[i])--------->>>把字符串的每一位还原为数字
{
if(c[i]>'0'&&c[i]<'9')
c[i]=c[i++]-48
else if(c[i]>='A'&&c[i]<='Z')
c[i]=c[i++]-55
else if(c[i]>='a'&&c[i]<='z')
c[i]=c[i++]-87
else
{
puts("error\n")
return
}
}
i=0
while(c[i])---》》》每一位分解为四位,注意输出顺序就可以了
{
for(j=3j>=0j--)
{
a[i][j]=c[i]%2
c[i]/=2
}
for(j=0j<4j++)
printf("%d",a[i][j])
i++
}
}
其实很简单
16进制数的一位转换为二进制数的四位就可以了
有问题
留言
必回
这个算法是比较好的算法了
十进制转二进制:-----------------------------------------------#include
#include
void
main()
{
int
d,n,i,j,a[50],outformat=1
printf("输入一个数:")
scanf("%d",&n)
if(n==0)
printf("\n十进制
0
转换二进制数:0")
else
{
printf("\n十进制
%d
转换二进制数:1",n)
for(i=1n!=1++i)
{
d=n%2
a[i]=d
n=n/2
}
for(j=i-1j>0--j)
{
if
(outformat%4==0)
printf("
")//取模的目的是为了每4个一组
++outformat
printf("%d",a[j])
}
}getch()
}
十进制转十六进制:-----------------------------------------------
#include
void
main()
{
int
u10
char
u16[10]
int
w=0,a,b,i
printf("请输入一个数字-->")
scanf("%d",&u10)
if(u10==0)
{
u16[0]='0'
w++
}
else
{
a=u10
while(a)
{
b=a%16
if(b<10)
{
u16[w]='0'+b
}
else
{
u16[w]='a'+b-10
}
a=a/16
w++
}
}
printf("\n")
printf("%d(10)转换为16进制数字为:",u10)
for(i=w-1i>=0i--)
{
printf("%c",u16[i])
}
printf("\n")
}
//将16进制的数保存到一个数组中,并将它一个个输出#include <stdio.h>
#define N 16
int main()
{
int n
int a[N]
int i
printf("Input a 16进制数: ")
scanf("%x",&n)
for (i = 0 i != N ++i)
{
a[N - 1 - i] = n % 2
n /= 2
}
for (i = 0 i != N ++i)
{
printf("%d",a[i])
if((i+1)%4 == 0)
printf(" ")
}
printf("\n")
return 0
}
示例运行结果:
Input a 16进制数: abcd
1010 1011 1100 1101