Ответ 1
Попробуйте http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html для начала.
Лучший пример использования новых переносимых макросов форматирования был найден в avr-libc. Я привел пример (из ссылки) для иллюстрации. библиотеки QNX также имеют более удобное для человека описание (если вам не нравится чтение спецификации холодно), хотя вам нужно прокручивать почти до конец страницы, чтобы добраться до мяса описаний.
#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);
Обратите внимание, что для этого используется оператор сцепления "String" "String" для вывода строки (в этом примере)
"The hexadecimal value of smallval is %x, the decimal value of longval is %ld.\n"
Попытка разложения соглашения об именах, как представляется, указывает:
- (первые три буквы)
- PRI для формата printf
- SCN для формата scanf
- (четвертая буква)
- x для шестнадцатеричного форматирования
- u для форматирования без знака
- o для восьмеричного форматирования
- я для целочисленного форматирования
- d для десятичного форматирования
- (дополнительные буквы)
- 8 для восьми бит
- 16 для шестнадцати бит
- 32 для тридцати двух бит
- 64 для шестидесяти четырех бит
- FAST8 для "быстрого" восьми бит
- FAST16 для "быстрого" шестнадцатибитного
- FAST32 для "быстрого" тридцати двух бит.
- FAST64 для "быстрого" шестидесяти четырех бит
- LEAST8 для "наименее" восьми бит
- LEAST16 для "наименее" шестнадцати бит
- LEAST32 для "наименее" тридцать два бита
- LEAST64 для "наименее" шестидесяти четырех бит
- PTR для указателя
- Максимальный размер поддерживаемого бита MAX
поэтому PRIx8
означает команду printf format для форматирования шестнадцатеричных восьми бит.