2010-06-30 7 views
1

У меня есть простая функция в моей программе, когда я хотел объединиться с юникодом и делать с ним все. В этой функции я хотел показать значение кода символа, введенного пользователем. Это представлялось возможным, вот моя функция:Как нарисовать wchar_t в int для отображения кодовой точки?

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

Теперь, как вы видите, я просто хотел, чтобы отобразить целое значение (например, ASCII-символ, такой как (int) "a"), но что-то вроде listcode(L"&") будет отображаться как &: &!

Невозможно ли найти целочисленное значение такого широкого символа?

+0

Я думаю, что вы просто не должны + = int для wstring, не преобразовывая его в строковое представление. – wRAR

+0

Он отлично работает, возвращая только int. –

+0

Нет, просто конвертируйте (int) arg в wstring перед добавлением его в str (я не знаю, как это сделать на C++ правильно). – wRAR

ответ

3

В C++ вы ничего не можете добавить к строкам, кроме символов и других строк. Нет никакого неявного преобразования из int (или что-нибудь еще) в строку. Это просто способ создания типа строки.
Что вы делаете вместо того, чтобы использовать строковые потоки:

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

На практике, однако, при преобразовании в строку в C++, то лучше иметь функции записи в поток, чем возвращает строку:

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

Таким образом, если вы хотите вывести что-то на консоль или в файл, вы можете напрямую передать std::cout или поток файлов, и если вы хотите получить строку, вы просто передаете поток строк.