void test(char *s)
{
int i, d;
sscanf(s, "%i", &i);
printf("%s converts to %i using %%i\\", s, i);
sscanf(s, "%d", &d);
printf("%s converts to %d using %%d\\", s, d);
}
int main()
{
test("123");
test("0x123");
return 0;
}
outputs:
123 converts to 123 using %i
123 converts to 123 using %d
0x123 converts to 291 using %i
0x123 converts to 0 using %d
As you can see, %i is capable of parsing hexadecimal, whereas %d is not. For printf they're the same.