Pruebe http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html para empezar.
Se encontró un mejor ejemplo de cómo usar las nuevas macros de formato portátil en avr-libc. He incluido un ejemplo (del enlace) para ilustrar. QNX libraries también tienen una mejor descripción legible para el ser humano (si no le gusta leer la especificación en frío), aunque tiene que desplazarse casi hasta el final de la página para llegar al meollo de las descripciones.
#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);
Tenga en cuenta que este utiliza el operador de concatenación implícita "Cadena" "Cadena" para producir la cadena (en este ejemplo)
"The hexadecimal value of smallval is %x, the decimal value of longval is %ld.\n"
Un intento de descomponer la convención de nombres parece indicar:
- (primeras tres letras)
- PRI para el formato de printf
- SCN para el formato scanf
- (cuarta carta)
- x para el formato hexadecimal
- U para el formato sin signo
- o para el formato octal
- i para el número entero de formatear
- d para formato decimal
(letras adicionales)
-
- 8 de ocho bits
- 16 durante dieciséis bits
- 32 de treinta y dos bits
- 64 de sesenta y cuatro bits
- FAST8 para "rápido" ocho
poco
- FAST16 para la "rápida" de dieciséis bits
- FAST32 para la "rápida" treinta y dos bits
- rÁPIDO 64 para la "rápida" sesenta y cuatro bits
- LEAST8 de "menos" de ocho bits
- LEAST16 para el bit
- LEAST32 "menos" dieciséis de "menos" treinta y dos bits
- LEAST64 de "menos" de sesenta -cuatro poco
- puntero PTR para
- MAX máxima admitida tamaño de bits
por lo PRIx8
significa instrucción de formato printf para formatear a ocho bits hexadecimales.
¿Qué es exactamente lo que quiere decir con "mixto 32/64 bits construye". ¿Se esperará que el usuario use los tipos de 'tamaño fijo' de 'stdint.h'? ¿Hay algo en particular que falta en la respuesta de Edwin que llevó a la generosidad que se agrega? –
@Michael: Sí, el problema surge cuando utiliza tipos enteros de ancho conocido como 'int64_t' bajo LP64 donde eso corresponde a' long'. El especificador de formato adecuado es '% ld' en ese caso, pero si construye en un sistema de 32 bits donde corresponde a' long long', entonces necesita '% lld'. Esperaba una descripción que motivara el uso de '' (como hago brevemente en este comentario) y proporcioné ejemplos. Algo que podría señalar para evitar tener que explicar el por qué y el cómo. –