C - Printing out a char pointer in hex is giving me strange results -


so writing small , simple program takes number input, converts hex, , prints out 2 characters @ time.

for numbers, prints out ffffff in front of output.

this code:

    //convert input unsigned int unsigned int = strtoul (argv[1], null, 0); //convert unsigned int char pointer char* c = (char*) &a;  //print out char 2 @ time for(int = 0; < 4; i++){     printf("%02x ", c[i]); } 

most of output fine , looks this:

./hex_int 1  01 00 00 00 

but numbers output looks this:

./hex_int 100000  ffffffa0 ffffff86 01 00 

if remove f's conversion correct, cannot figure out why doing on inputs.

anyone have ideas?

you're mismatching parameters , print formats. default argument promotions cause char parameter (c[i]) promoted int, sign extends (apparently char signed type). told printf interpret argument unsigned int using %x format. boom - undefined behaviour.

use:

printf("%02x ", (unsigned int)(unsigned char)c[i]); 

instead.


Comments

Popular posts from this blog

wordpress - (T_ENDFOREACH) php error -

Export Excel workseet into txt file using vba - (text and numbers with formulas) -

Using django-mptt to get only the categories that have items -