Maison > développement back-end > C++ > Comment puis-je imprimer avec précision les valeurs hexadécimales d'octets uniques à l'aide de printf ?

Comment puis-je imprimer avec précision les valeurs hexadécimales d'octets uniques à l'aide de printf ?

Linda Hamilton
Libérer: 2024-12-16 18:08:13
original
697 Les gens l'ont consulté

How Can I Accurately Print Hexadecimal Values of Single Bytes Using printf?

printf : impression précise des valeurs hexadécimales

Lorsque vous travaillez avec des vecteurs de caractères, il est courant de rencontrer un écart lors de l'impression d'octets individuels en hexadécimal formater en utilisant printf. Ce problème survient lorsque vous tentez d'imprimer un seul caractère, qui ne fait qu'un seul octet, mais que vous obtenez à la place une valeur multi-octets.

La raison derrière ce comportement réside dans la correspondance de type de printf. Le modificateur %x attend un paramètre int non signé, et un caractère est généralement promu en int lorsqu'il est transmis à une fonction d'argument variable. Cette promotion peut conduire à des résultats incorrects lors de l'impression de valeurs de caractère unique.

Pour résoudre ce problème, il faut explicitement convertir le caractère en un entier non signé pour garantir des résultats prévisibles. Par exemple, le code suivant imprimera avec précision un seul octet :

printf(" 0x%1x ", (unsigned)pixel_data[0]);
Copier après la connexion

Il est important de noter qu'une largeur de champ de un n'est pas particulièrement utile dans ce contexte, car elle spécifie simplement le nombre minimum de chiffres à afficher. Cependant, si vous souhaitez traiter les valeurs d'octet comme des valeurs non signées et les étendre à zéro lors de la conversion en entier non signé, vous pouvez utiliser un caractère non signé pour le vecteur ou effectuer une conversion spécifique :

printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
Copier après la connexion

Alternativement, vous pouvez appliquer une opération de masquage après promotion pour obtenir le même résultat :

printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
Copier après la connexion

En suivant ces techniques, vous pouvez vous assurer que printf imprime avec précision valeurs hexadécimales, même lorsqu'il s'agit d'octets uniques.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal