Wie konvertiert einen double in einen unsigned char?
Ich bin auf der Suche um zu ändern, einen Vektor von Double-in unsigned chars mit c++.
Um sicherzustellen, dass es funktioniert, ich schrieb:
unsigned char x = 0;
double y = 4.6;
x = (unsigned char) y;
printf("%d", y);
cout << endl << "the char of 4.6 is: " << x;
getchar();
aber anstatt den char gleich 4 oder 5 bekomme ich eine riesige Zahl wie 1717986918
oder ein Diamant-symbol mit cout.
Ich nehme an, dies ist, weil seine Interpretation 4.6 als "4.6", aber gibt es eine Möglichkeit, es zu speichern, so dass es nur zu einem unsigned char der Nähe von gleichem Wert?
Warum sind Sie versuchen zu tun, wie eine unsichere Konvertierung? Was versuchen Sie zu tun?
InformationsquelleAutor | 2013-09-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
(unsigned char)4.6
abgeschnitten4
.Aber wenn Sie
cout
einechar
es druckt den entsprechenden Charakter (zB.cout << char(65)
druckenA
). Wenn Sie möchten, drucken Sie die Wert Ihrerchar
dann müssen Sie den Darsteller zuerst auf eine breitere integer-Typ, wie zB.:Das problem mit der
printf
, bist du mit dem falschen format specifier (%d = signed integer
) im Vergleich zu den Argumenten, die Sie (einchar
). Aber Sie schon herausgefunden, ich mache nur meine Antwort komplett. 😉Wieder, werden Sie wahrscheinlich wollen, um Sie zu wirken zunächst:
Da bist du mit dem falschen format-Bezeichner zu drucken, die eine doppelte, oder die falschen parameter Typ Druck eines int.
wow, gerade gemerkt das ich verwendet y anstelle von x sorry dumme post
Ah ja sorry, habe ich übersehen, dass ein Teil der Frage. @WhozCraig es richtig. Meine Antwort umfasst nur die "Diamant-symbol mit cout" Teil.
Behoben. Sorry nochmal für die mit Blick auf diesen Teil.
InformationsquelleAutor syam
Ich nehme an, Sie erkennen, dass char der nur der ganzzahlige Teil des Doppel-und das auch bis 255 in den meisten Fällen (das ist der Grund, warum in der Regel Doppelzimmer umgewandelt werden char* - strings, wenn Sie wollen, dass die gesamte Nummer). Also, was Sie wirklich suchen für ist die Besetzung der ganzzahlige Teil des double in einen char, also eine lexikalische Besetzung würde den trick tun (oder itoa, stringstream-Funktionen). Für ex:
InformationsquelleAutor jayadev
Dies ist nur ein bug --
y
ist eine doppelte, und die%d
Formatbezeichner für Ganzzahlen.Aber das Haupt-Problem ist ein logisches problem-Sie sind verwirrend, die zahlen mit Ihren Darstellungen. Wenn Sie drucken Zeichen-Zahl 4, es gibt keinen Grund zu erwarten, dass es zu schauen, wie die Ziffer "4".
InformationsquelleAutor David Schwartz