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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top