Question

J'ai une fonction simple dans mon programme, quand je voulais mess avec unicode et faire des choses avec elle. Dans cette fonction, je voulais afficher la valeur de code du caractère entré par l'utilisateur. Il me semblait possible, voici ma fonction:

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

Maintenant que vous voyez que je voulais juste afficher la valeur entière (comme un caractère ascii, comme (int) "a"), mais quelque chose comme listcode(L"&") sera affiché comme &: &!

est-il pas possible de trouver la valeur entière d'un caractère large comme ça?

Était-ce utile?

La solution

En C ++, vous ne pouvez pas ajouter quoi que ce soit à des chaînes, mais des personnages et d'autres chaînes. Il n'y a pas de conversion implicite de int (ou autre) à chaîne. C'est juste la façon dont le type de chaîne est conçu.
Ce que vous faites est la place à des flux de chaîne d'utilisation:

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

Dans la pratique, cependant, lors de la conversion de chaînes en C ++, il est préférable d'avoir des fonctions d'écriture sur un flux, que de retourner une chaîne:

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

De cette façon, si vous voulez quelque chose de sortie à la console ou à un fichier, vous pouvez passer directement std::cout ou un flux de fichiers, et si vous voulez une chaîne, vous suffit de passer un flux de chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top