So drucken unsigned char als 2-stellige hex-Wert in C?

Ich versuche, Ausdruck einer unsigned char-Wert als eine 2-Stellige hex-Wert, sondern immer das Ergebnis als 4-Stellige hex-Werte, nicht sicher, was ist Los mit meinem code.

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

Ich erwarte eine 2-stellige hex-Ergebnis als 0xC0, aber ich bekomme immer 0xC0FF.

Als auch, wenn ich versuchte, zu drucken die gleiche variable (status) als ein unsigned char mit den %bu format identifier ich habe die Ausgabe als 255.

Wie bekommt man nur die zwei hex-Zeichen als Ausgabe?

Es würde mehr Möglichkeiten geben, zu erklären, was Los war, wenn der Ausgang war 0xFFC0 (obwohl das wäre hart auf compiler-bug-Gebiet). Was passiert, wenn Sie bewegen Sie den |= Zuordnung in eine separate Anweisung vor der printf()? Wenn das Ergebnis ändert, wahrscheinlich haben Sie noch einen compiler-Fehler zu behandeln. Welche version von welchen compiler benutzt du auf welcher version auf welcher Plattform (o/s)?
IDE-Version: µVision V4.02 Copyright (c) Keil Elektronik GmbH / Keil Software, Inc. 1995 - 2009-Tool Version Zahlen: Toolchain: PK51 Prof. Entwickler-Kit-Version: 9.01 Toolchain Pfad: C:\Software\Keil\C51\BIN\ C-Compiler: C51.Exe V9.01 Assembler: A51.Exe V8.02 Linker/Locator: BL51.Exe V6.22 Bibliothekar: LIB51.Exe V4.24-Hex-Konverter: OH51.Exe V2.6 CPU-DLL: S8051.DLL V3.72 Dialog-DLL: DP51.DLL V2.59
Wenn ich ein kleines Programm mit dem code, die Sie zeigte, die Ausgabe ist status = (0xC0). Sind Sie sicher, dass code ist genau, was in Ihrem Programm? Schreiben Sie ein kleines in sich geschlossenes Programm (mit #include <stdio.h> und eine vollständige definition der main() - Funktion), und zeigen Sie es uns zusammen mit Ihren output. Kopieren-und-einfügen; nicht re-Typ.
Wie ich es verstehe, Keil C generiert code für den 8051 (eine kleine CPU für embedded-Systeme), und ich glaube nicht, dass es voll konform zum C-standard. Ihr Programm sollte der Arbeit richtig auf. Ich habe ein "keil" - tag; vielleicht wird die Aufmerksamkeit von jemandem, der weiß mehr über die Launen der compiler, den Sie verwenden.
Übrigens, Ihr printf() format-string enthält \n\r. Das ist nicht die gewöhnliche Ordnung der CRLF Zeilenende; Sie würden normalerweise schreiben \r\n. Das sollte jedoch nur sehr wenig haben zu tun mit der Ausgabe von die Anzahl.

InformationsquelleAutor Asad Waheed | 2012-09-10

Schreibe einen Kommentar