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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top