Вопрос

У меня есть простая функция в моей программе, когда я хочу беспокоиться с Unicode и делать с ним вещи. В этой функции я хотел отобразить значение кода символа, который введенный пользователем. Казалось возможным, вот моя функция:

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;
}

Теперь, как вы видите, я просто хотел отобразить целочисленное значение (например, символ ASCII, такой как (int) "a"), но что-то вроде listcode(L"&") будет отображаться как &: & !

Разве невозможно найти целочисленное значение широкого символа такого?

Это было полезно?

Решение

В C ++ вы не можете добавить ничего в строки, но символы и другие строки. Нет неявного преобразования из int (или что-нибудь еще) для строки. Это просто так, как тип строки разработан.
То, что вы делаете вместо этого, это использовать строковые потоки:

std::wstring listcode(wchar_t arg)
{
  std::wostringstream oss;
  oss << static_cast<int>(arg);
  oss << L": ";
  oss << arg;
  return oss.str();
}

На практике, однако, при преобразовании в строки в C ++ лучше иметь функции, написанные в поток, чем возвращение строки:

void listcode(std::wostream os, wchar_t arg)
{
  os << static_cast<int>(arg);
  os << L": ";
  os << arg;
}

Таким образом, если вы хотите что-то выводить на консоль или в файл, вы можете напрямую пройти std::cout или поток файлов, и если вы хотите строку, вы просто пропустите строковый поток.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top