title: What is a string of hexadecimal digits?
body: <p>Now that the question is answered, I will post my solution using the help that I got from everyone here (THANKS!)</p>
  
  <p>The main thing I don't like is assuming every input ends in '\n' just because my linux terminal does!  Also there has to be a more elegant way to convert A-F/a-f to decimal, maybe using a helper function that I write myself (don't have access to any functions yet besides pow and printf)!</p>
  
  <p>I am doing K&amp;R The C Programming Language, Exercise 2.3:</p>
  
  <p><em>"Write a function, htoi(s), which converts a <strong>string of hexadecimal digits</strong> (including an optional 0x or 0X) into its equivalent integer value.  The allowable digits are 0 through 9, a through f, and A through F."</em></p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;math.h&gt;
  
  #define MAXLEN 1000                                /* maximum accepted user input is 999 digits */
  
  int htoi( char s[], int maxPower ) ;               /* maxPower will be two less than string length (len - 2) because the exponentiation is 0-indexed                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                     *  remove the length values which represent '\n' and '\0' in user input                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                     *  if the string begins with "0x" or "0X", we remove two more from the power variable inside the htoi() body. */
  
  int main( void )
  {
    int c, i ;
    int len ;                                        /* tracks length of hexString, used to determine exponent value */
    char hexString[ MAXLEN ] ;
  
    len = 0 ;
    for ( i = 0 ; i &lt; MAXLEN - 1 &amp;&amp; ( c = getchar() ) != EOF ; ++i ) {
      hexString[i] = c ;
      ++len ;
    }
    hexString[len] = '\0' ;                          /* value of len is one more than termination value of i in above loop */
  
    printf( "Hex String: %s\nInt: %d\n", hexString, htoi( hexString, len - 2 ) ) ;
    return 0 ;
  }
  
  int htoi( char s[], int power )
  {
    int j, i, n, decimal ;
  
    n = 0 ;
    if ( s[0] == '0' &amp;&amp; ( s[1] == 'x' || s[1] == 'X' ) ) {  /* cutting off first two array values if string begins with 0x or 0X */
        j = 0 ;
        while ( ( s[j] = s[j + 2] ) != '\0' ) {
          ++j ;
        }
        power = power - 2 ;                                 /* maximum exponent value now represents the usable data */
      }
  
      for ( i = 0 ; s[i] != '\n' &amp;&amp; s[i] != '\0' ; ++i ) {
        if ( s[i] &gt;= '0' &amp;&amp; s[i] &lt;= '9' ) {
          decimal = s[i] - '0' ;
          n = ( decimal * pow( 16, power ) ) + n ;
          --power ;
        } else if ( s[i] == 'A' || s[i] == 'a' ) {
          decimal = 10 ;
          n = ( decimal * pow( 16, power ) ) + n ;
          --power ;
        } else if ( s[i] == 'B' || s[i] == 'b' ) {
          decimal = 11 ;
          n = ( decimal * pow( 16, power ) ) + n ;
          --power ;
        } else if ( s[i] == 'C' || s[i] == 'c' ) {
          decimal = 12 ;
          n = ( decimal * pow( 16, power ) ) + n ;
          --power ;
        } else if ( s[i] == 'D' || s[i] == 'd' ) {
          decimal = 13 ;
          n = ( decimal * pow( 16, power ) ) + n ;
          --power ;
        } else if ( s[i] == 'E' || s[i] == 'e' ) {
          decimal = 14 ;
          n = ( decimal * pow( 16, power ) ) + n ;
          --power ;
        } else if ( s[i] == 'F' || s[i] == 'f' ) {
          decimal = 15 ;
          n = ( decimal * pow( 16, power ) ) + n ;
          --power ;
        } else {
          printf( "ERROR 69:\nInput string was not hexidecimal (0-9, A-F, a-f)\nResult is 0!\n" ) ;
          n = 0;
          return n;
        }
      }
      return n ;
  }
  </code></pre>