Come lanciare wchar_t in int per la visualizzazione del punto di codice?
-
01-10-2019 - |
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?
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.