Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2008, 02:50   #1
softrix
 
Регистрация: 02.03.2008
Сообщений: 8
По умолчанию char в wchar_t

Подскажите как перевести const * char в wchar_t

Вот что мне нужно

Код:
const char *arr = typeid(*object]).name();
...
TextOut(MemoryDC, 10, 10,arr,20);
Т.е. я хочу получить тип объекта и вывести в окне в тектовом виде.
Если делать обычное приведение типа
wchar_t *ltext = reinterpret_cast<wchar_t *>(text);

То текст выводится в виде абракадабры

Как правильно сделать ?
softrix вне форума Ответить с цитированием
Старый 14.06.2008, 15:10   #2
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

MultiByteToWideChar функция. см мсдн
vvviperrr вне форума Ответить с цитированием
Старый 14.06.2008, 16:40   #3
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

В данном случае вполне можно обойтись TextOutA. Или, поскольку про данную строку точно известно, что она может состоять только из латинских букв, просто посимвольно присвоить char'ы wchar'ам. Кастать эти типы просто так конечно нельзя - размеры разные.
B_N вне форума Ответить с цитированием
Старый 07.11.2010, 22:49   #4
rs2128
Новичок
Джуниор
 
Регистрация: 07.11.2010
Сообщений: 1
По умолчанию

не знаю поможет или нет, я не спец в С++ ... но
попробуй подключить #include <clocale>
и в главной ф-ции в самом начале прописать след:
void main() {
setlocale(LC_CTYPE, "");
....
}

и у тебя должно выводить все на русском
rs2128 вне форума Ответить с цитированием
Старый 08.11.2010, 15:30   #5
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
std::wstring widen(const std::string& narrow, const std::locale& locale = std::locale("") )
{
    if( narrow.empty() )
        return std::wstring();

    typedef std::string::traits_type::state_type state_type;
    typedef std::codecvt<wchar_t, char, state_type> CVT;

    const CVT& cvt = std::use_facet<CVT>(locale);
    std::wstring wide(narrow.size(), '\0');
    state_type state = state_type();
    const char* from_beg = &narrow[0];
    const char* from_end = from_beg + narrow.size();
    const char* from_nxt;
    wchar_t* to_beg = &wide[0];
    wchar_t* to_end = to_beg + wide.size();
    wchar_t* to_nxt;

    std::wstring::size_type sz = 0;
    std::codecvt_base::result r;
    do
    {
        r = cvt.in(state, from_beg, from_end, from_nxt,
                          to_beg,   to_end,   to_nxt);
        switch (r)
        {
        case std::codecvt_base::error:
	    return wide;

        case std::codecvt_base::partial:
            sz += to_nxt - to_beg;
            wide.resize(2*wide.size());
            to_beg = &wide[sz];
            to_end = &wide[0] + wide.size();
            break;

        case std::codecvt_base::noconv:
            wide.resize(sz + (from_end-from_beg));
            std::memcpy(&wide[sz], from_beg, (std::size_t)(from_end-from_beg));
            r = std::codecvt_base::ok;
            break;

        case std::codecvt_base::ok:
            sz += to_nxt - to_beg;
            wide.resize(sz);
            break;
        }
    } while( r != std::codecvt_base::ok );

   return wide;
}
Единственный рабочий способ в моих линуксах( да и как и не в моих виндоусах ) средствами STL, который я видел, перевода std::string в std::wstring.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 08.11.2010, 15:40   #6
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

ах да, почитайте про фасеты и std::locale
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
char to int kezman Общие вопросы C/C++ 3 24.07.2008 08:59
из char в int llin Общие вопросы C/C++ 13 11.07.2008 06:51
из char в int?? Mika Общие вопросы C/C++ 4 20.06.2008 15:18
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17