title: Printf() printing character as 32 bit
body: <p>I'm running a quick test to make sure I have my pointer arithmetic down:</p>
  
  <p><strong>main.c</strong></p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  
  #define ADDRESS    0xC0DCA11501LL
  #define LENGTH     5
  
  
  void print_address( char *, char );
  
  /* Main program */
  int main( int argc, char *argv[] )
  {
      char nums[ LENGTH ];
  
      /* LSB first */
      for( int i = 0; i &lt; LENGTH; i++ )
      {
          nums[ i ] = ( ADDRESS &gt;&gt; ( 8 * i ) ) &amp; 0xFF;
      }
  
      print_address( nums, LENGTH );
  
      system("PAUSE");
  
      return 0;
  }
  
  void print_address( char *data, char len )
  {
       char *data_ptr = data;
  
       while( len-- )
       {
              printf( "%X\n", *data_ptr++ );
       }
  }
  </code></pre>
  
  <p>What I expect is the bytes of <code>ADDRESS</code> to be printed out LSB first in hex format.  But the last 3 bytes appear to be printed with 32-bit lengths:</p>
  
  <pre><code>1
  15
  FFFFFFA1
  FFFFFFDC
  FFFFFFC0
  Press any key to continue . . .
  </code></pre>
  
  <p>Is this due to my bit-shifting arithmetic, something compiler-specific, some <code>printf()</code> behavior?</p>
  
  <p>(I'm using MinGW GCC v6.3.0 on Windows 10 to compile.)</p>