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<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");
    }*/
}

 

 

 

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值