web-dev-qa-db-fra.com

Comment puis-je imprimerf () un uint16_t?

J'ai besoin d'utiliser printf () pour imprimer un uint16_t. Cette réponse SO ( Comment imprimer la valeur des variables uint32_t et uint16_t? ) indique que je dois utiliser inttypes.h.

Cependant, je travaille sur un système embarqué et inttypes.h n'est pas disponible. Comment imprimer un uint16_t lorsque le spécificateur de format pour un uint16_t n'est pas disponible?

16
user9993

Vous devez utiliser le style de inttypes.h mais définir les symboles vous-même. Par exemple:

#define PRIu8 "hu"
#define PRId8 "hd"
#define PRIx8 "hx"
#define PRIu16 "hu"
#define PRId16 "hd"
#define PRIx16 "hx"
#define PRIu32 "u"
#define PRId32 "d"
#define PRIx32 "x"
#define PRIu64 "llu" // or possibly "lu"
#define PRId64 "lld" // or possibly "ld"
#define PRIx64 "llx" // or possibly "lx"

Trouvez-les pour votre machine et utilisez-les. Jetez un oeil à d'autres dans inttypes.h et figurez dont vous aurez besoin.

De cette façon, votre code sera plus portable. Je travaille sur les systèmes embarqués depuis la fin des années 70. Croyez-moi: la portabilité est importante.

18
Jeff Learman

Un moyen évident est:

printf("%u\n", (unsigned int)x);

L'int entier non signé est garanti sur au moins 16 bits, il ne s'agit donc pas d'une conversion avec perte.

14
M.M

short int est le plus petit d'au moins 16 bits, alors convertissez la valeur en unsigned short int et l'imprimer avec %hu.

7
StenSoft