Как привести wchar_t в int для отображения кодовой точки? - PullRequest
1 голос
/ 30 июня 2010

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

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"&") будет отображаться как &: &!

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

1 Ответ

3 голосов
/ 30 июня 2010

В 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 или поток файла, а если вам нужна строка, вы просто передаете поток строки.

...