Maison >développement back-end >C++ >Pourquoi `printf` affiche-t-il une sortie inattendue lors de l'impression d'octets hexadécimaux à partir d'un vecteur de caractères ?
Lorsque vous travaillez avec un vecteur de caractères (pixel_data), imprimez un seul octet en tant que valeur hexadécimale (printf(" 0x %1x ", pixel_data[0])) peut produire de manière inattendue un entier de quatre octets (0xfffffff5) au lieu de la valeur prévue (0xf5).
Printf attend généralement un paramètre entier non signé pour le modificateur %x. Cependant, un char est promu en int lorsqu'il est transmis à une fonction varargs comme printf. Cette promotion entraîne l'impression d'octets supplémentaires.
Pour garantir des résultats prévisibles, convertissez explicitement le caractère en un entier non signé :
printf(" 0x%1x ", (unsigned)pixel_data[0]);
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
Le champ %1x width spécifie le nombre minimum de chiffres à afficher. Cependant, son utilité est limitée dans ce contexte car au moins un chiffre est toujours nécessaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!