16进制字符类型与16进制相互转换

char str[]="2b7e151628aed2a6abf7158809cf4f3c" ;

    char key[32];

strtoHex(str,key);

//转换之后位数减半  32——16


void strtoHex(char *str,char * hex)//字符类型转成16进制  
{
             char ch;
             int     i=0, by = 0;
                                         
   while(i < 64 && * str)        //保证到str结尾
                      // the maximum key length is 32 bytes(256 bits) and
    {                           // hence at most 64 hexadecimal digits
        ch = toupper(* str++);   // process a hexadecimal digit
 
        if(ch >= '0' && ch <= '9')
            by = (by << 4) + ch - '0';
        else if (ch >= 'A' && ch <= 'F')
            by = (by << 4) + ch - 'A' + 10;
        else                    // error if not hexadecimal
        {
            printf( "key must be in hexadecimal notation\n" );
            exit(0);
        }

        // store a key byte for each pair of hexadecimal digits
        if(i++ & 1)
            hex[i / 2 - 1] = by & 0xff;           
      }
}




void hextoStr(char *hex,char * str)//16进制转成字符类型
{
    int i=0, by = 0;

   while(i < 32 && * hex)        // the maximum key length is 32 bytes(256 bits) and
    {                           // hence at most 64 hexadecimal digits
        by = * hex ;              // process a hexadecimal digit(high)
                         by=by>>4 &0x0f;
        if(by >= 0 && by <= 9)
            * str++ = by + '0' ;
        else if (by >= 0x0A && by <= 0x0F)
            * str++ = by -  10+ 'A' ;
        by = * hex++;            // process a hexadecimal digit(low)
                         by=by &0x0f;
        if(by >= 0 && by <= 9)
            * str++ = by + '0' ;
        else if (by >= 0x0A && by <= 0x0F)
            * str++ = by -  10+ 'A' ;
                        i++;
      }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值