lolamontes69

K+R Exercise2_3

Sep 5th, 2014
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.52 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int htoi(char s[]);
  5.  
  6. int main()
  7. {
  8.     int i, n, c;
  9.     char s[10];     // A very large number in hex :D
  10.  
  11.     i=0;
  12.  
  13.     printf("Enter a hexstring >");
  14.  
  15.     while((c=getchar())!=EOF && c!='\n') {
  16.         s[i]=c;     // when the {}'s were missing it parsed but skipped
  17.         ++i;        // the second statement
  18.     }                      
  19.     s[i]='\0';      // doesn't automatically add '\0'
  20.     n = htoi(s);
  21.     if(i==0) puts("\n<<<Try using data>>>");
  22.     else if(n==-1) puts("<<<Not a hexstring>>>");
  23.     else printf("Converted value = %d\n",n);
  24.  
  25.     return(0);
  26. }
  27.  
  28. int htoi(char s[])
  29. {
  30.     int i, n;
  31.     int HEX;      /* Used to determine cases where hex is preceeded by 0x or 0X */
  32.  
  33.     i = n = 0;
  34.     HEX=2;
  35.  
  36.     while(s[i] != '\0') {
  37.         if((isxdigit(s[i])) || (s[i]=='x' && i==1) || (s[i]=='X' && i==1)) {
  38.             if(s[i]=='0' && i==0)
  39.                 HEX=0;
  40.             else if((s[i]=='x' && i==1) || (s[i]=='X' && i==1))
  41.                 HEX=1;
  42.             else if(HEX==0 || HEX==1)               // (Valid 0x,0X or 0 intro)
  43.                 HEX=2;
  44.             if(HEX==2) {
  45.                 if(s[i] >= 'A' && s[i] <= 'F')
  46.                     n = 16*n + (s[i]-'7');          // for base 16; 128 64 32 16 0
  47.                 else if(s[i] >= 'a' && s[i] <= 'f')
  48.                     n = 16*n + (s[i]-'W');
  49.                 else
  50.                     n = 16*n + (s[i]-'0');
  51.             }
  52.         }
  53.         else return(-1);
  54.         ++i;
  55.     }
  56.     return(n);
  57. }
Advertisement
Add Comment
Please, Sign In to add comment