Hi Gene, I don't think this is a bug in sprintf. When a char is converted to int, the MSB bit is copied to all other bits, this way: 10101010 -> 1111111110101010 If the MSB were 0, then: 01010101 -> 0000000001010101
Try this (I did not test... don't know if it will work as expected): void write0_byte_to_hex(char * s) { char sresult[3]; sprintf(sresult, "%02X", ((int) s[0]) & 0xff); uart_enq(&uart0, sresult); } Anyway, I think the code of sprintf is very big, if you are using it only for printing to hex. I implemented some simpler and smaller code than sprintf, but only useful when you need "%02X". void raw_uart_puthex8 (int val) { int i; i = val >> 4; i &= 0x0f; if (i < 10) { i += '0'; } else { i += 'A' - 10; } raw_uart_write(i); i = val; i &= 0x0f; if (i < 10) { i += '0'; } else { i += 'A' - 10; } raw_uart_write(i); }