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...
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.