Maison >développement back-end >C++ >Pourquoi « printf » produit-il une sortie hexadécimale inattendue lors de l'impression de caractères ?
Comprendre le comportement d'impression hexadécimale de printf
Lors de l'impression d'une représentation hexadécimale d'un caractère à l'aide de printf, des résultats inattendus peuvent survenir si un caractère est passé sans casting explicite. Cela est dû au comportement de printf, qui attend un paramètre int non signé pour le modificateur %x.
Promotion des caractères et comportement non défini
En C, les caractères (char ) sont généralement promus en int dans les fonctions varargs telles que printf. Cependant, la taille d'un int varie selon les plates-formes, ce qui peut provoquer un comportement indéfini si le caractère n'est pas explicitement converti.
Casting explicite pour des résultats prévisibles
Pour garantir des résultats prévisibles , convertissez explicitement le caractère en un entier non signé avant l'impression. Cela évitera un comportement inattendu et affichera la représentation hexadécimale correcte :
printf(" 0x%1x ", (unsigned)pixel_data[0] );
Considérations sur la largeur de champ
Notez que définir une largeur de champ de 1 pour l'impression hexadécimale n'est pas particulièrement utile, car il spécifie le nombre minimum de chiffres à afficher et au moins un chiffre est toujours nécessaire.
Gestion des caractères non signés
Si le caractère sur la plate-forme est signé, il est important de le gérer de manière appropriée. Pour éviter de convertir des valeurs de caractère négatives en grandes valeurs entières non signées, envisagez d'utiliser un caractère non signé ou de convertir explicitement la valeur à l'aide d'un caractère non signé ou d'une opération de masquage :
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0] );
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU );
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!