Cómo emitir wchar_t en int para mostrar el punto de código?
-
01-10-2019 - |
Pregunta
I tiene una función simple en mi programa, cuando me quedé con ganas de perder el tiempo con Unicode y hacer cosas con ella. En esta función, he querido mostrar el código del carácter introducido por el usuario. Parecía posible, aquí está mi función:
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;
}
Ahora bien, como se ve sólo quería mostrar el valor entero (como un carácter ASCII, como (int) "a"
), sino algo así como listcode(L"&")
se mostrará como &: &
!
No es posible encontrar el valor entero de un carácter ancho de esa manera?
Solución
En C ++, no se puede añadir nada a las cuerdas, pero los personajes y otras cadenas. No existe conversión implícita de int
(o cualquier otra cosa) a cadena. Eso es sólo la forma en que el tipo de cadena está diseñado.
Lo que se hace en cambio es el uso de corrientes de cadena:
std::wstring listcode(wchar_t arg)
{
std::wostringstream oss;
oss << static_cast<int>(arg);
oss << L": ";
oss << arg;
return oss.str();
}
En la práctica, sin embargo, al convertir a cadenas en C ++, es mejor tener funciones de grabación en una corriente, de devolver una cadena:
void listcode(std::wostream os, wchar_t arg)
{
os << static_cast<int>(arg);
os << L": ";
os << arg;
}
De este modo, si desea mostrar algo a la consola o en un archivo, se puede pasar directamente std::cout
o una secuencia de archivo, y si quieres una cadena, sólo tiene que pasar una corriente de cuerdas.