hextoint.c
contents ::
  address.c
  atquick_sort.c
  bits.c
  countspace.c
  ctof.c
  hextoint.c
  hist.c
  indexof.c
  itob.c
  linkage.c
  lzw.c
  maxval.c
  merge.c
  merge_sort.c
  peof.c
  pointer.c
  quick2.c
  quick.c
  quick_sort.c
  reverse.c
  rftoc.c
  rmultiblank.c
  rtabs.c
  squeeze.c
  structoo.c
  syscall.c
  tempfunc.c
  tfc.c
  word.c

#include <stdio.h>

int power(int base, int n);
int htoi(char s[]);

main(){
  char s[] = "0xA";
  char m[] = "177";
  char o[] = "77";
  char g[] = "0xFF";
  
  printf("%d\n", htoi(s));
  printf("%d = 177\n", htoi(m));
  printf("%d = 77\n", htoi(o));
  printf("%d\n", htoi(g));

  return 0;
}

int power(int base, int n){
  if(n!=0){
    int p, i;
    p = 1;
    for(i = 1; i<=n; ++i){
      p = p * base;
    }
    return p;
  } else return 1;
}

int htoi(char s[]){
  int length = strlen(s)-1;
  int start = 0;
  int add = 0;
  int value = 0;
  int i;
  if(s[1]=='x'||s[1]=='X'){
    start = 2;
  } else start = 0;
  for(i=start; i<=length; ++i){
    if(s[i]>='0'&&s[i]<='9'){
      value = s[i]-'0';
    } else if(s[i]>='a' && s[i]<='f'){
      value = s[i]-'a'+10;
    } else if(s[i]>='A' && s[i]<='F'){
      value = s[i]-'A'+10;      
    } else {
      printf("Sorry: invalid input");
      return 0;
    }
    add = add +(power(2, length-i)*value);
  }
  return add;
}

James Little