一、单个字符二进制转换成十六进制
声明:extern void bintohex(int *binary, char *hex);
int str[]={1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1};
char *hex =(char *)malloc(sizeof( char));
int i=0,k=0;
while (str[i]==0 || str[i]==1 ){k++; i++;}//计算长度
bintohex(str,hex);
for (int t=0; t< k/4; t++)printf("%c",hex[t]);
void bintohex(int *binary, char *hex )
{
int i=0,j=3,k=0,s = 0;
//计算整形数组的长度
while (binary [i]==0 || binary[i]==1 ){k++; i++;}
//char *hex =(char *)malloc(sizeof(char));
int *b = (int *)malloc(strlen(hex)* sizeof(int ));
//把二进制的每个字符转换成十六进制
for (i = 0; i < k/4; i++)
{
b[i]= binary[j]+binary [j-1]*2+binary[j-2]*4+ binary[j-3]*8;
j=(i+2)*4-1; //重新定位到第二个字节起始
}
for (i = 0; i < k/4; i++)
{
if(b[i] <= 9 && b[i] >= 0)
hex[i]=(char )b[i]+48;
else
{
switch(b[i])
{
case 10: hex [i] = 'a';
break;
case 11: hex [i] = 'b';
break;
case 12: hex [i] = 'c';
break;
case 13: hex [i] = 'd';
break;
case 14: hex [i] = 'e';
break;
case 15: hex [i] = 'f';
break;
default:
s = 1;
}
}
}
if(s == 1)
printf( "字符串有误!请重新输入\n" );
/* else
{
printf("\n转换后的数为:");
for (int t=0; t< k/4; t++)printf("%c",hex[t]);
printf("\n");
}*/
}
二、单个字符十六进制转换成二进制
声明:extern void hextobin(char *hex, int *binary);
char str[]="3243f6a8885a308d313198a2e0370734" ;
int *binar = (int *)malloc(strlen(str)*sizeof( int)*4); //定义输出的存储数组
hextobin(str,binar);//函数调用
for (int t=0; t<strlen(str)*4; t++)printf("%d",binar[t]);//输出显示
//单个字符十六进制转换成二进制
void hextobin(char *hex,int * binary)
//void hextobin(char *hex)
{
int k=strlen(hex );
int i,j=3,s = 0;
int result = 0;
int *b = (int *)malloc(strlen(hex)* sizeof(int ));
//int *binary = (int *)malloc(strlen(hex)*sizeof(int)*4);
for (i = 0; i < k; i++)
{
if(hex [i] <= '9' && hex[i] >= '0' )
b[i]= hex[i]-48;
else
{
switch(hex [i])
{
case 'A' : b[i] = 10;
break;
case 'B' : b[i] = 11;
break;
case 'C' : b[i] = 12;
break;
case 'D' : b[i] = 13;
break;
case 'E' : b[i] = 14;
break;
case 'F' : b[i] = 15;
break;
case 'a' : b[i] = 10;
break;
case 'b' : b[i] = 11;
break;
case 'c' : b[i] = 12;
break;
case 'd' : b[i] = 13;
break;
case 'e' : b[i] = 14;
break;
case 'f' : b[i] = 15;
break;
default:
s = 1;
}
}
}
//把十六进制的每个字符转换成二进制
for (i = 0; i < k; i++)
{
for (j; j>=0,j>=i*4; j--)//单个字符的转换
{
binary[j] = b[i]% 2;
b[i] /= 2;
}
j=(i+2)*4-1; //重新定位到第二个字节起始
}
if(s == 1)
printf( "字符串有误!请重新输入\n" );
/* else
{
printf("\n转换后的数为:");
for (int t=0; t<k*4; t++)printf("%d",binary[t]);
printf("\n");
}*/
}