char str [4];
sprintf (str, "%.2x", 0x01);//Conversion of byte to the 2nd bit hexadecimal value
I expect in str[0] 0 character, in str[1] 1 character, that is '0' and '1'. As a result function returns '1' and 'C'. Remaining numbers - it is normal...
The reason is, that you only give ONE byte as value (0x01) and %x expects a TWO byte value. Then two bytes are used with only one valid, the other just undefined.
Therefore you may cast that value to 16bits like
sprintf (str, "%.2x", (unsigned int)0x01);
The reason is, that you only give ONE byte as value (0x01) and %x expects a TWO byte value.
Total and absolute rubbish!
If you want to get 2 digits from sprintf, you need to change it to
sprintf (str, "%2.2x", 0x01)
Separate note: This is such a strange forum, I was told my message was in error because it contained the spam word Wod. Took me too long to notice it was embedded in "two digits".
Maybe I'm naive, but i don't see why that word would be considered spam.
I appreciate your "Total and absolute rubbish". Well, I have it tested, confirmed the problem in the first place, and the fix using 16bit. Beside that, the problem is also visible using just a simple "%x" format sting. And I do really assume that YOU have also reproduced and tested your fix, don't you? I will not use inappropiate wording in my response, sorry.
You might also carefully read
http://www.keil.com/support/man/docs/c51/c51_printf.htm
and there understand the difference between %bx and %x, another option to solve the primary problem:
printf ("xchar %bx xint %x xlong %lx\n",x,y,z);
Got it? Reading helps!
Oh dear. Why post a link to a page that you've clearly not fully comprehended?
Nice to see active discussion.
As an arbitrator I will say that both of you are right. The (unsigned int) is there to ensure a 16 bit value is passed as a parameter and the 2.2X to ensure the resultant string consists of two hex characters. There are likely many ways to do it, but the combination works for me. In the same way that any of the C51 workarounds for the weird architecture ever made sense.
IMHO, the sooner the x51 is taken out of college teaching the better.