Comment imprimer unsigned char que 2 chiffres hex valeur dans C?

Je suis en train d'impression d'un unsigned char valeur à 2 Chiffres hex valeur, mais toujours obtenir le résultat sous la forme de 4 Chiffres hex valeurs, vous ne savez pas quel est le problème avec mon code.

//unsigned char declaration
unsigned char status = 0x00;
//printing out the value 
printf("status = (0x%02X)\n\r", (status |= 0xC0));

Je m'attends à 2 chiffres hex résultat que 0xC0, mais je reçois toujours 0xC0FF.

Ainsi, lorsque j'ai essayé d'imprimer la même variable (statut) comme un unsigned char avec le %bu identificateur de format j'ai eu de la sortie comme 255.

Comment obtenez-vous juste que les deux caractères hexadécimaux en sortie?

Il n'y aurait plus les moyens d'expliquer ce qui se passait si la sortie a été 0xFFC0 (même si ce serait presque compilateur bug territoire). Qu'advient-il si vous déplacez le |= affectation dans une déclaration distincte avant la printf()? Si le résultat change, vous n'avez probablement avoir un compilateur bug à traiter. La version de compilateur êtes-vous à l'aide de la version de la plate-forme (o/s)?
IDE-Version: µVision V4.02 Copyright (c) Keil Elektronik GmbH / Keil Software, Inc. 1995 - 2009 les Numéros de Version de l'Outil: Chaîne de compilation: PK51 Prof. Kit de Développeurs Version: 9.01 Toolchain Chemin d'accès: C:\Software\Keil\C51\BIN\ Compilateur C: C51.Exe V9.01 Assembleur: A51.Exe V8.02 Éditeur De Liens/Localisateur: BL51.Exe V6.22 Bibliothécaire: LIB51.Exe V4.24 Hex Converter: OH51.Exe V2.6 CPU DLL: S8051.DLL V3.72 Dialogue DLL: DP51.DLL V2.59
Quand je lance un petit programme contenant le code que vous a montré, la sortie est status = (0xC0). Êtes-vous sûr que le code est exactement ce qui est dans votre programme? Écrire un petit programme autonome (avec #include <stdio.h> et une définition complète de la main() fonction), et de le présenter à nous avec votre sortie. Copier-coller à la fois; ne pas re-type.
Comme je le comprends, Keil C génère du code pour le 8051 (un petit CPU pour les systèmes embarqués), et je ne pense pas qu'il soit pleinement conforme à la norme. Votre programme doit fonctionne correctement. J'ai ajouté un "keil" tag; peut-être pour attirer l'attention de quelqu'un qui en sait plus sur les aléas du compilateur que vous utilisez.
Par ailleurs, votre printf() chaîne de format comprend \n\r. Ce n'est pas l'ordre traditionnel pour le CRLF de fin de ligne: il vous suffit d'écrire normalement \r\n. Cependant, que très peu à voir avec la sortie du numéro.

OriginalL'auteur Asad Waheed | 2012-09-10