HtoI

十六进制转为整型

初步算法思路:(简易版)

1 输入一行字符串,如果存在以'0x’或'0X’开头的字符串,则认为找到合法的十六制输入,得到新的字符串

例如:输入:0xabd 得到:abd

2 根据得到的新的字符串,按照十六进制和整型的转化规则进行转化

即:abd--->10 11 13

并分析abd,从右向左分别为0,1,2

写一个power()函数,用于进行幂运算

 

#include"stdio.h"
#include"stdlib.h"
#include"ctype.h"
#define MaxLen 1000
#define Yes 1
#define No 0

int isdigital(char c)
{
    if((c>='0')&&(c<='9'))
    {
    return 1;
    }
    else
    {
    return 0;
    }
}
int isalph_h(char c)
{
    if(((c>='a')&&(c<='f')) ||((c>='A')&&(c<='F')))
    {
    return 1;
    }
    else
    {
    return 0;
    }
}
double power(int n,int i)
{
    double s=1;
    int num;
    if(i==0)
    {
        s=1;
    }
    else
    {
        for(num=1;num<=i;num++)
        {
        s=s*n;
        }
    }
    return s;
}
int atoi(char s)
{
    int n;
    if(isdigital(s))
    {
    n=s-'0';
    }
    if((s>='a')&&(s<='f'))
    {
    n=s-'a'+10;           
    }
    if((s>='A')&&(s<='F'))
    {
    n=s-'A'+10;           
    }
    return n;
}
int * FormatString(char string[],int limit)
{
    int c;
    int i;
    int result[MaxLen];
    i=0;
    while(i<limit-1&&(c=getchar())!=EOF&&c!='\n')
    {
        string[i]=c;
        ++i;
    }
    int m=i;
    int t=1;
    int state=No;
    for(i=0;i<=m;i++)
    {
        char temp;
        temp=string[i];
        if(isdigital(temp)||isalph_h(temp))
        {
            if(state==No)
            {
                 if((string[i]=='0')&&(string[i+1]=='x'||string[i+1]=='X'))
                  {   
                      //result[t]=temp;
                      state=Yes;
                  }
            }
              else if(temp!='x'&&temp!='X')
              {
                  result[t]=atoi(temp);
                     t++;    
              }
        }
    }       
    if(t==1)
    {
        result[0]=0;
    }
    else
    {
    result[0]=t-1;
    result[t]=0;
    }
    return result;
}

void main()
{
    int c;
    int *H;
    char temp;
    int i,j;
    int s=0;
    int num;
    char str[MaxLen];
    H=FormatString(str,MaxLen);
    num=H[0];
    for(j=1,i=num-1;i>=0;i--,++j)
    {
    s=s+H[j]*power(16,i);   
    }
    printf("十六进制转为整型的值为:%d",s);
    system("pause");

}

posted @ 2010-04-25 18:38  nuddle  阅读(643)  评论(0)    收藏  举报