Wie werfen wchar_t in int für den Codepunkt angezeigt wird?
-
01-10-2019 - |
Frage
Ich habe eine einfache Funktion in meinem Programm, wenn ich zu verwirren will, wurde um mit Unicode und tut Sachen mit ihm. In dieser Funktion wollte ich der Benutzer den Code eingegeben Wert des Zeichens angezeigt werden soll. Es schien möglich, hier ist meine Funktion:
wstring listcode(wchar_t arg) {
wstring str = L"";
str += static_cast<int> (arg); //I tried (int) arg as well
str += L": ";
str += (wchar_t) arg;
return str;
}
Nun, wie Sie sehen, ich wollte nur den ganzzahligen Wert anzuzeigen (wie ein ASCII-Zeichen, wie (int) "a"
), aber so etwas wie listcode(L"&")
als &: &
angezeigt!
Ist es nicht möglich, den ganzzahligen Wert eines breiten Charakters wie das zu finden?
Lösung
In C ++ können Sie nichts Strings aber Zeichen und andere Zeichenfolgen hinzuzufügen. Es gibt keine implizite Konvertierung von int
(oder etwas anderes) zu bespannen. Das ist nur die Art und Weise der String-Typ ausgelegt ist.
Was Sie tun, ist stattdessen verwenden String-Streams:
std::wstring listcode(wchar_t arg)
{
std::wostringstream oss;
oss << static_cast<int>(arg);
oss << L": ";
oss << arg;
return oss.str();
}
In der Praxis jedoch, wenn in Zeichenfolge in C ++ konvertiert, ist es besser, Funktionen zu haben, um einen Stream zu schreiben, als einen String zurückkehrt:
void listcode(std::wostream os, wchar_t arg)
{
os << static_cast<int>(arg);
os << L": ";
os << arg;
}
So, wenn Sie an die Konsole ausgeben wollen etwas, oder in eine Datei, können Sie direkt übergeben std::cout
oder einen Datei-Stream, und wenn Sie eine Zeichenfolge wollen, müssen Sie nur einen String-Stream übergeben.