Reputation:
I have a list of numbers as below:
0, 16, 32, 48 ...
I need to output those numbers in hexadecimal as:
0000,0010,0020,0030,0040 ...
I have tried solution such as:
printf("%.4x", a); // Where a is an integer
But the result that I got was:
0000, 0001, 0002, 0003, 0004 ...
I think I'm close there. How can I fix it?
I'm not so good at printf
in C.
Upvotes: 62
Views: 344884
Reputation: 455132
Try:
printf("%04x",a);
0
- Left-pads the number with
zeroes (0) instead of spaces, where
padding is specified.4
(width) - Minimum number of
characters to be printed. If the
value to be printed is shorter than
this number, the result is right justified
within this width by padding on the left
with the pad character. By default this is
a blank space, but the leading zero we used
specifies a zero as the pad char.
The value is not truncated even if the result is
larger.x
- Specifier for hexadecimal
integer.More here
Upvotes: 138
Reputation: 509
I use it like this:
printf("my number is 0x%02X\n",number);
// Output: my number is 0x4A
Just change number "2" to any number of characters you want to print ;)
Upvotes: 9
Reputation: 1902
You can use the following snippet code:
#include<stdio.h>
int main(int argc, char *argv[]){
unsigned int i;
printf("decimal hexadecimal\n");
for (i = 0; i <= 256; i+=16)
printf("%04d 0x%04X\n", i, i);
return 0;
}
It prints both decimal and hexadecimal numbers in 4 places with zero padding.
Upvotes: 1
Reputation: 13151
Your code has no problem. It does print the way you want. Alternatively, you can do this:
printf("%04x",a);
Upvotes: 2