- Category: --> PIC16
the current printf sign extends the %x. Thus, 0xFF prints as FF but the int 0xFFFF prints as FFFFFFFFF. Does it make sense to sign extend when printing hexadecimal or octal numbers?
If not, I would patch vfprintf.c as follows
117: else if(*ch == 'x'){ radix = 16; upcase = 0; }
to
else if(*ch == 'x'){ nosign = 1; radix = 16; upcase = 0; }
118: else if(*ch == 'X'){ radix = 16; upcase = 1; }
to
else if(*ch == 'X'){ nosign = 1; radix = 16; upcase = 1; }
and
120: else if(*ch == 'o') radix = 8;
to
else if(*ch == 'o') { nosign = 1; radix = 8; }
A similar patch would work with printf_tiny, if the code is corrected for signed int (see item #1613675). Since printf_small does not have a signed/unsigned option, I do not thing that the added complexity makes sense.
The other workaround is to always add %ux to the printf but I think a patch is better.
Thanks
Nick