Good introduction to <inttypes.h> [closed]
Try http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html for a start.
A better example of how to use the new portable formatting macros was found in avr-libc. I've included an example (from the link) to illustrate. QNX libraries also have a better human-readable description (if you don't like reading the specification cold), although you have to scroll nearly to the end of the page to get to the meat of the descriptions.
#include <inttypes.h>
uint8_t smallval;
int32_t longval;
...
printf("The hexadecimal value of smallval is %" PRIx8
", the decimal value of longval is %" PRId32 ".\n",
smallval, longval);
Note that this uses the "String" "String" implied concatenation operator to yield the string (in this example)
"The hexadecimal value of smallval is %x, the decimal value of longval is %ld.\n"
An attempt to decompose the naming convention seems to indicate:
- (first three letters)
- PRI for printf format
- SCN for scanf format
- (fourth letter)
- x for hexadecimal formatting
- u for unsigned formatting
- o for octal formatting
- i for integer formatting
- d for decimal formatting
- (extra letters)
- 8 for eight bit
- 16 for sixteen bit
- 32 for thirty-two bit
- 64 for sixty-four bit
- FAST8 for "fast" eight bit
- FAST16 for "fast" sixteen bit
- FAST32 for "fast" thirty-two bit
- FAST64 for "fast" sixty-four bit
- LEAST8 for "least" eight bit
- LEAST16 for "least" sixteen bit
- LEAST32 for "least" thirty-two bit
- LEAST64 for "least" sixty-four bit
- PTR for pointer
- MAX for maximum supported bit size
so PRIx8
means printf format instruction to format to hexadecimal eight bits.
I always go to the standard (PDF link) for those things; they're not too complicated once you figure out the patterns they're set up in. The relevant section is §7.8 Format conversion of integer types <inttypes.h>
.
HP Has a good reference on writing portable code and they give some specific advice for using inttypes.h
Writing Portable Code