#include#include#include
//进制转换
int hex2int(char *str, int *result){
*result = 0;
while(*str > 0)
{
// printf("\nstr %s\n",str);
// printf("*str %c\n",*str);
// printf("==========\n");
if(*str >= '0' && *str <= '6')
{
//printf("*str %c\n",*str);
*result = *result * 7 + *str++ - '0';
//printf("*result %d\n",*result);
}
else if(*str >= 'a' && *str <= 'f')
{
*result = *result * 16 + *str++ - 'a' + 10;
}
else if(*str >= 'A' && *str <= 'F')
{
*result = *result * 16 + *str++ - 'A' + 10;
}
else
{
return 1;
}
}
//printf("*result %d\n",*result);
return 0;
}
int int2num(int num, char **result, char scale){
char arr[32];
char *temp = arr + 32;
//char *table = "0123456789abcdef";
char *table = "0123456";
*--temp = 0;
while(num > scale)
{
*--temp = table[num % scale];
num = num / scale;
}
if(num)
{
*--temp = table[num];
}
else if(*temp == 0)
{
*--temp = '0';
}
// printf("\ntemp %s\n",temp);
*result = strdup(temp);
}
char* ADD(char *x, char *y){
int a, b;
if(hex2int(x, &a)){
printf("x isn't hex.\n");
}
if(hex2int(y, &b)){
printf("y isn't hex.\n");
}
int2num(a + b , &x, 7);
return x;
}
int main(){
char x[32], y[32];
printf("x: ");
scanf("%s", x);
printf("y: ");
scanf("%s", y);
char *t = ADD(x, y);
printf("x + y = %s\n", t);
free(t);//释放内存
return 0;
}