cout nicht drucken unsigned char
Arbeite ich auf folgenden code:
#include<iostream>
#include<stdio.h>
using namespace std;
main() {
unsigned char a;
a=1;
printf("%d", a);
cout<<a;
}
Er den Druck, 1 und einige Müll.
Warum cout
verhält sich so?
- Ein
unsigned char
ist nicht einint
. Warum erzählst duprintf
es ist? - Was würden Sie erwarten, dass aus dem senden einer binären 1 bis stout?
unsigned char
gefördert werden, umunsigned
in einem printf-Aufruf, so dass der code wird akzeptiert.- Ah, ich Dummerchen. Ich dachte, es war eine für unsigned char, weil der char ein, aber das Ende macht keinen Sinn, wirklich. Dank für das clearing es.
- die ersten 32 Zeichen sind steuerzeichen und werden nicht-druckbare
- Möglich, Duplikat der wie Drucke ich einen unsigned char als hex in c++ ostream?
- scheint zu funktionieren jetzt. jetzt seinen eben std::cout Druck-Müll, wenn es bekommt ein uint8_t.
std::cout << (uint8_t)3 << std::endl
druckt ein Herz, obwohl eindeutig die richtige Darstellung für ein byte mit dem Wert 3, ist nicht ein Herz, es sei denn, seine ein vorzeichenbehaftetes byte, dann wäre es sinnvoll.
Du musst angemeldet sein, um einen Kommentar abzugeben.
cout << a
Druck ist ein Wert, der zu sein scheint Müll zu Ihnen. Es ist nicht Müll eigentlich. Es ist nur ein nicht-druckbare ASCII-Zeichen, das erste gedruckte sowieso. Beachten Sie, dass ASCII-Zeichen entsprechend1
ist nicht druckbar. Sie können überprüfen, oba
druckbar ist oder nicht,std::isprint
als:Gibt es
0
(Lesen:false
), der angibt, der Charakter ist nicht-druckbare--
Sowieso, wenn Sie möchten, dass Ihre
cout
drucken1
auch, dann warfa
dieser:Ich hatte ein ähnliches Problem hier, die ich schon lange vergessen. Die Lösung für dieses problem mit
iostream's
cout
können Sie das wie folgt:statt Gießen es zurück zu einem anderen Typ, wenn Sie möchten
cout
zum drucken derunsigned char
Wert im Gegensatz zu denascii
Charakter. Sie müssenpromote
es.Wenn Sie bemerkt alles, was ich Tat, war fügen Sie eine
+
vor derunsigned char
. Dies ist die unäre addition, die Förderung derunsigned char
geben Sie die tatsächliche Anzahl der Repräsentation.Benutzer-Baum mit Augen, ist verantwortlich für die Erinnerung an diese Lösung.
Müssen Sie festgelegten
a
als Ganzzahl alscout<< (int)(a);
. Mit dieser werden Sie beobachten1
auf die Ausgabe. Mitcout << a;
, der Druck wirdSOH (Start of Heading)
entsprechenden ascii-Wert von1
können nicht gedruckt werden und es daher einige Sonderzeichen zu beobachten ist.BEARBEITEN:
Um genauer zu sein, die
cout
Aussage solltecout << static_cast<unsigned>(a)
als Nawaz erwähnt hat.Den C-compiler hat seine eigene Art der Festlegung der Art der gedruckten Ausgabe, da können Sie den Typ der Ausgabe.
Ex:
so können Sie auch drucken
c
als int von%d
oder char%c
string%s
oder ein hex-Wert%x
.Wo C++ hat seine eigene Art und Weise zu, die
cout
druckt die 8-bit-Werte alschar
standardmäßig. So verwenden Sie die Bezeichner mit dem output-argument.Können Sie entweder:
einen
+
vor dem Namen der Ausgabe-argumentverwenden Sie eine cast Funktion
unsigned(var)
; wie,printf("%u",a);
es ist so einfach probieren Sie es
%u
ist besser als%hhu
für eineunsigned char
argument.cout::operator<<(unsigned char)
interpretiert Ihr argument als Charakter und nicht als eine arithmetische Wert?)