Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как конвертировать WCHAR to CHAR?

9.7K
17 августа 2005 года
Shopot
8 / / 16.08.2005
Как конвертировать WCHAR to CHAR, и как конвертировать строку Unicode в строку Ansi.
292
17 августа 2005 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by Shopot
Как конвертировать WCHAR to CHAR, и как конвертировать строку Unicode в строку Ansi.


charTOoem (там с регитсром точно не помню)

406
17 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Matush
charTOoem (там с регитсром точно не помню)


MultiByteToWideChar

292
17 августа 2005 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by vitaly2003s
MultiByteToWideChar


а чем CharToOem нехорош :) ?

406
17 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Matush
а чем CharToOem нехорош :) ?


А тем что она не сможет транслировать символы из UNICODE в ANSI.

9.0K
22 августа 2005 года
DarkMaster
36 / / 27.07.2005
в Visual C++ 6.0 есть функция int wctob(wchar c )
перегонят в ANSI, а функция btowc, ей обратная, но эти функции зависят от региональных установок.
7.6K
23 августа 2005 года
Helicopterr
50 / / 21.08.2005
Цитата:
Originally posted by DarkMaster
в Visual C++ 6.0 есть функция int wctob(wchar c )


есть функция wctomb(char,t_wchar)

12K
25 августа 2005 года
dolpin_spb
9 / / 18.08.2005
Цитата:
Originally posted by Shopot
Как конвертировать WCHAR to CHAR, и как конвертировать строку Unicode в строку Ansi.


Вопрос 1: какой язык используется???
Вопрос 2: если это библиотека, то на каком языке пищется приложение, которое пользует ее?
Вопрос3: Если - это С++ то что за глупые вопросы, а если пишешь на VBA смотри MSDN!

Ссылка с MSDN:
WCHAR 16-bit Unicode character. For more information, see Character Sets Used By Fonts.
This type is declared in Winnt.h as follows:

typedef wchar_t WCHAR;

Пробуй юзать: BOOL CharToOem(LPCTSTR lpszSrc,LPSTR lpszDst);

55K
12 января 2010 года
wchar_88
5 / / 12.01.2010
Цитата: dolpin_spb
Вопрос 1: какой язык используется???
Вопрос 2: если это библиотека, то на каком языке пищется приложение, которое пользует ее?
Вопрос3: Если - это С++ то что за глупые вопросы, а если пишешь на VBA смотри MSDN!

Ссылка с MSDN:
WCHAR 16-bit Unicode character. For more information, see Character Sets Used By Fonts.
This type is declared in Winnt.h as follows:

typedef wchar_t WCHAR;

Пробуй юзать: BOOL CharToOem(LPCTSTR lpszSrc,LPSTR lpszDst);



Во во, я посмотрел бы на тебя, в первую очередь идет wchar_t , которую чартуоем никак не переваривает:

wchar_t* ascii = L"Hello мир!!!";
CharToOem(ascii,ascii);

error C2664: 'CharToOemA' : cannot convert parameter 1 from 'wchar_t *' to 'LPCSTR'

во вторых

wctomb && wcstombs не помогают, они конечно переводят строку в анси стринг, но дальнейшее отображение русского языка обречено на провал

wchar_t* wstr = L"Hello мир!!!";
char* ascii = new char[wcslen(wstr) + 1];
wctomb( ascii, *wstr); //, wcslen(wstr) );
//CharToOem(ascii,ascii); // убрать коммент для проверки
MessageBox(NULL,ascii,"строки АНСИ",0); // русский текст каракулями


В общем такие вот реалии жизни :))))
И где тут глупый вопрос теперь?


PS в общем тема снова открыта, у кого какие идеи есть по этому поводу?

55K
13 января 2010 года
wchar_88
5 / / 12.01.2010
хм.... обе функции выдают идентичный результат, так что открываю перед вами великий секрет устройства функции wctomb :)))))))

Код:
char* asANSI2()
    {
    wchar_t* wstr = L"Hello мир!!!";
    char* ascii = new char[wcslen(wstr) + 1];
    wctomb( ascii, *wstr);
    return ascii;
    }

char* asAnsi()
    {
    wchar_t* wstr = L"Hello мир!!!";
    char* ansi = new char[wcslen(wstr) + 1];
   
    for(UINT i=0;i<wcslen(wstr)/2;i++)
        {
        int srca = wstr;
        if(srca>=int(L"а") && srca<=int(L"я"))
            ansi = int("a") + (srca - int(L"а"));
        else
            if(srca>=int(L"А") && srca<=int(L"Я"))
                ansi = int("А") + (srca - int(L"А"));
            else
                {
                ansi = (char)wstr;
                if(wstr == 0)
                    break;
                }
        }
    return ansi;
    }
55K
13 января 2010 года
wchar_88
5 / / 12.01.2010
ну че, ребят, вообщем предыдущая версия была провальная, теперь предлагаю вашему вниманию свою версию,
жалко конечн что никто не успел за это время что-то подсказать, поэтому татам:


Код:
char* asAnsi()
    {
    wchar_t* wstr = L"Когда Вадик открыл варежку, его ожидало большое удивление.";
    UINT lenght = wcslen(wstr) +1;
   
    char* ansi = new char[lenght];
   
    for(UINT i=0;i<lenght;i++)
        {
        int srca = wstr;
        if(srca>=1072 && srca<1104)
            {
            if((srca - 1072)>15) //р=224
                ansi = (209 + (srca - 1073));// small fix (1072 + 1)
            else
                ansi = (160 + (srca - 1072));
            }
        else
            if(srca>=1040 && srca<1072)
                ansi = (128 + (srca - 1040));
            else
                ansi = (char)wstr;
        }
    return ansi;
    }


Да кста, забыл сказать, это всё дело в кодировке cp866, надеюсь кому-л пригодится.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог