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