Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Good introduction to <inttypes.h> [closed]

Tags:

c

printf

c99

I want to recommend the use of <inttypes.h> to someone doing printf with mixed 32/64 bit builds. I tried to Google an introduction or tutorial page with a few examples and usage guidelines, but I couldn't find one.

Can someone recommend an introduction or tutorial for <inttypes.h>?

like image 772
Ben Jackson Avatar asked Jun 09 '11 21:06

Ben Jackson


People also ask

What is the use of Inttypes H?

The purpose of <inttypes. h> is to provide a set of integer types whose definitions are consistent across machines and independent of operating systems and other implementation idiosyncrasies. It defines, via typedef, integer types of various sizes.

What is Inttypes h in C?

The inttypes. h file is a C header file that is part of the C standard library and API. It was added with the 1999 version of the ISO C standard (known as C99). It includes the stdint.

What is PRIx8?

so PRIx8 means printf format instruction to format to hexadecimal eight bits.

What is PRIu64?

PRIu64 is a format specifier, introduced in C99, for printing uint64_t , where uint64_t is (from linked reference page): unsigned integer type with width of ... 64 bits respectively (provided only if the implementation directly supports the type)


2 Answers

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.

like image 150
Edwin Buck Avatar answered Sep 21 '22 12:09

Edwin Buck


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

like image 34
Carl Norum Avatar answered Sep 21 '22 12:09

Carl Norum