进制之间换算

1、16进制字符串转换成10进制

long int str_dec(uchar s[])

{    
uchar i,m,n; 
long int temp=0;   
m=4;             //十六进制是按字符串传进来的,所以要获得它的长度
for(i=0;i<m;i++)    
{        
if(s[i]>='A'&&s[i]<='F')   //十六进制要判断他是不是在 A~F 或者 a~f 之间   , a=10
n=s[i]-'A'+10;        
else if(s[i]>='a'&&s[i]<='f')         
n=s[i]-'a'+10;         
else n=s[i]-'0';        
temp=temp*16+n;    
  }    
  return temp;

}


//将字符串s转化为相应的10进制整数
long int StrToDec(long int dec, uchar *str) 

    uchar *tmp=str; 
    dec=0; 
    while (*tmp) dec=dec*10+(*tmp++&15); 
    return dec; 
}


2、10进制数转换成字符串


void Int_char(long int datas)   
{
  if(datas/1000000)
  {
    Result[0]=datas/1000000+'0';
    Result[1]=datas%1000000/100000+'0';
    Result[2]=datas%100000/10000+'0';
    Result[3]=datas%10000/1000+'0';
    Result[4]=datas%1000/100+'0';
Result[5]=datas%100/10+'0';
Result[6]=datas%10+'0';
Result[7]='\0';
  }
  else if(datas/100000)
  {
    Result[0]=datas/100000+'0';
    Result[1]=datas%100000/10000+'0';
    Result[2]=datas%10000/1000+'0';
    Result[3]=datas%1000/100+'0';
    Result[4]=datas%100/10+'0';
Result[5]=datas%10+'0';;
Result[6]='\0';
Result[7]=0;
  }
  else if(datas/10000)
  {
    Result[0]=datas/10000+'0';
    Result[1]=datas%10000/1000+'0';
    Result[2]=datas%1000/100+'0';
    Result[3]=datas%100/10+'0';
    Result[4]=datas%10+'0';
Result[5]='\0';
Result[6]=0;
Result[7]=0;
  }
  else if(datas/1000)
  {
    Result[0]=datas/1000+'0';
    Result[1]=datas%1000/100+'0';
    Result[2]=datas%100/10+'0';
    Result[3]=datas%10+'0';
    Result[4]='\0';
Result[5]=0;
Result[6]=0;
Result[7]=0;
  }
   else if(datas/100)
  {
    Result[0]=datas/100+'0';
    Result[1]=datas%100/10+'0';
    Result[2]=datas%10+'0';
    Result[3]='\0';
    Result[4]=0;
Result[5]=0;
Result[6]=0;
Result[7]=0;
  }
   else if(datas/10)
  {
    Result[0]=datas/10+'0';
    Result[1]=datas%10+'0';
    Result[2]='\0';
    Result[3]=0;
    Result[4]=0;
Result[5]=0;
Result[6]=0;
Result[7]=0;
  }
  else
  {
    Result[0]=datas%10+'0';
    Result[1]='\0';
    Result[2]=0;
    Result[3]=0;
    Result[4]=0;
Result[5]=0;
Result[6]=0;
Result[7]=0;
  }

}



3、字符串转换成16进制

//string to hex

unsigned int str_hex(unsigned char*str,unsigned char *hex)

{

       unsigned char ctmp, ctmp1,half;

       unsigned int num=0;

       do{

                do{

                        half = 0;

                        ctmp = *str;

                        if(!ctmp) break;

                        str++;

                }while((ctmp == 0x20)||(ctmp ==0x2c)||(ctmp == '\t'));

                if(!ctmp) break;

                if(ctmp>='a') ctmp = ctmp-'a' + 10;

                else if(ctmp>='A') ctmp = ctmp -'A'+ 10;

                else ctmp=ctmp-'0';

                ctmp=ctmp<<4;

                half = 1;

                ctmp1 = *str;

                if(!ctmp1) break;

                str++;

                if((ctmp1 == 0x20)||(ctmp1 ==0x2c)||(ctmp1 == '\t'))

                {

                        ctmp = ctmp>>4;

                        ctmp1 = 0;

                }

                  else if(ctmp1>='a') ctmp1 =ctmp1 - 'a' + 10;

                else if(ctmp1>='A') ctmp1 = ctmp1 - 'A' + 10;

                else ctmp1 = ctmp1 - '0';

                ctmp += ctmp1;

                *hex = ctmp;

                hex++;

                num++;

        }while(1);

        if(half)

        {

                ctmp = ctmp>>4;

                *hex = ctmp;

                num++;

        }

        return(num);

}



void StringToHex(uchar* hex, uchar* str) //16进制字符串转换为16进制字节数组,要求字符串偶数个
{
int len = strlen(str);
int tmp,i;
for (i = 0; i < len / 2; i++)
{
if (str[2*i] >= '0' && str[2*i] <= '9')
{
tmp = ((str[2*i] - '0') << 4);
}
else if (str[2*i] >= 'A' && str[2*i] <= 'F')
{
tmp = (((str[2*i] - 'A') + 10) << 4);
}
else if (str[2*i] >= 'a' && str[2*i] <= 'f')
{
tmp = (((str[2*i] - 'a') + 10) << 4);
}


if (str[2*i+1] >= '0' && str[2*i+1] <= '9')
{
hex[i] = tmp + (str[2*i+1] - '0');
}
else if (str[2*i+1] >= 'A' && str[2*i+1] <= 'F')
{
hex[i] = tmp + (str[2*i+1] - 'A') + 10;
}
else if (str[2*i+1] >= 'a' && str[2*i+1] <= 'f')
{
hex[i] = tmp  + (str[2*i+1] - 'a') + 10;
}
}
}

4、16进制转换成字符串

//hex to string

void hex_str(unsigned char *inchar,unsigned int len, unsigned char *outtxt)

{

       unsigned char hbit,lbit;

       unsigned int i;

     for(i=0;i<len;i++)

      {

       hbit = (*(inchar+i)&0xf0)>>4;

         lbit = *(inchar+i)&0x0f;

       if (hbit>9) outtxt[2*i]='A'+hbit-10;

          else outtxt[2*i]='0'+hbit;

       if (lbit>9) outtxt[2*i+1]='A'+lbit-10;

          else   outtxt[2*i+1]='0'+lbit;

    }

      outtxt[2*i]= 0;

}

转载请注明出处 : http://blog.csdn.net/qq_26093511/article/details/51356053


转载于:https://www.cnblogs.com/alan666/p/8312315.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值