Как бросить WHAR_T в Int для отображения точки кода?
-
01-10-2019 - |
Вопрос
У меня есть простая функция в моей программе, когда я хочу беспокоиться с 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
или поток файлов, и если вы хотите строку, вы просто пропустите строковый поток.