Domanda

Ho una funzione semplice nel mio programma, quando mi mancava di pasticciare con unicode e fare cose con esso. In questa funzione, ho voluto per visualizzare il valore del codice del carattere immesso dall'utente. Sembrava possibile, ecco la mia funzione:

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

Ora, come si vede Volevo solo per visualizzare il valore intero (come un carattere ASCII, come ad esempio (int) "a"), ma qualcosa di simile listcode(L"&") verrà visualizzato come &: &!

Non è possibile trovare il valore intero di una vasta personaggio del genere?

È stato utile?

Soluzione

In C ++, non si può aggiungere nulla a corde, ma i personaggi e le altre stringhe. Non c'è conversione implicita da int (o qualsiasi altra cosa) per stringa. Questo è solo il modo in cui il tipo di corda è realizzata.
Quello che fai invece è quello di flussi di stringa Uso:

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

In pratica, tuttavia, durante la conversione in stringhe in C ++, è meglio avere funzioni di scrittura a un ruscello, che restituendo una stringa:

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

In questo modo, se si vuole qualcosa di uscita alla console o in un file, si può passare direttamente std::cout o un flusso di file, e se si vuole una stringa, è sufficiente passare un flusso di stringa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top