C++单个字符二进制与十六进制互相转换

一、单个字符二进制转换成十六进制

声明: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= '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

 

 

 

 

 

你可能感兴趣的:(C++)