2014年8月17日 星期日

16進制(文字)轉10進制(數字)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef enum{
 STR_BINARY,
 STR_DECIMAL,
 STR_HEX,
 STR_UNKNOW,
}STR_NUMBER_TYPE;


STR_NUMBER_TYPE CheckStrNumType(const char *Str){
 //HEX
 if(NULL != strstr(Str , "0x") || NULL != strstr(Str ,"0X")){
  printf("%s is hex\n",Str);
  return STR_HEX;
 }

 return STR_UNKNOW;
}

int power(int x,int n)
{
    int i;
    int num = 1;
 
    for(i=1;i<=n;i++)
        num*=x;
 
    return num;
}

unsigned int StrHexToInt(char *Str){
 int StrLen = strlen(Str) , i = 0 , sum=0;
 char tmp[10]={'\0'} , *ptr = Str;

 while('\0' != *ptr )
 {
  tmp[i] = toupper(*ptr);
  i++;
  ptr++;
 }
 ptr = tmp + 2;
 i = 0;

 while('\0' != *ptr){
  if(isalpha(*ptr)){
   sum += ((int)*ptr - 55) * power(16 , StrLen -3);
  }else{
   sum += ((int)*ptr - 48) * power(16 , StrLen -3);
  }
  ptr++;
  StrLen--;
 }
 printf("StrHexToInt = %x\n",sum);
 return sum;
}

int Test(void){
 STR_NUMBER_TYPE ret = STR_UNKNOW; 
 
 char *hexstr = "0x6a0";
 char *hexstr1 = "0X9B00";

 ret = CheckStrNumType(hexstr1);

 switch(ret){
  case STR_BINARY:
   break;
  case STR_DECIMAL:
   break;
  case STR_HEX:
   StrHexToInt(hexstr1);
   break;
  default:
   break;
 }
}

int main(int argc, char* argv[])
{
 Test();
 return 0;
}

沒有留言:

張貼留言