花了点时间把 hex 转 dec的代码写了下,特别是 ‘A’ ‘a’ 的操作。
#include<stdio.h>
int multiple16(int i)
{
// 16 will be multipled i times
int sum=1;
if (i == 0)
return 1;
while(--i)
sum *= 16;
return sum;
}
char transHex(char* hex1)
{
char hex = *hex1;
if (hex >= 'A' && hex <= 'Z') return hex-'A'+10;
if (hex >= 'a' && hex <= 'z') return hex-'a'+10;
if (hex >= '0' && hex <= '9') return hex-'0';
}
int hexToDec(char* hex)
{
int len=strlen(hex);
int sum=0;
// two ways to calculate it
#if 0
while(len)
sum += transHex(hex++)* multiple16(len--);
#else
while(--len)
sum = (sum + transHex(hex++))* 16;
sum += transHex(hex);
#endif
return sum;
}
char* decToHex(int dec)
{
char hex[100]={0};
char ptr[100]={0};
int i=0,j=0;
while(dec){
int tmp= dec%16;
if (tmp >=10)
hex[i++] = tmp-10+'A';
else
hex[i++] = tmp+'0';
dec = dec/16;
}
int len = strlen(hex);
#if 0
int ii=0, jj=len-1;
while (ii<=jj)
{
char tmp;
tmp = hex[jj];
hex[jj] = hex[ii];
hex[ii] = tmp;
ii++;
jj--;
}
return hex;
#else
while(len--)
ptr[j++] = hex[len];
return ptr;
#endif
}
void main(void)
{
char *buffer="AB";
int i =88931;
printf("%d\n",hexToDec(buffer));
printf("%s\n",decToHex(i));
}