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

Ваш аккаунт

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

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

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

wcstombs_s, конвертирование с русскими символами

5.1K
26 апреля 2009 года
Karrde
88 / / 15.10.2007
Нужно сконвертить из String^ в char. Вызываю wcstombs_s. Проблема в том, что если в строке все написано латиницей, то конвертирование проходит на ура. Но если попадается хотя бы один символ кириллицей, то функция выдает ошибку.((
5
26 апреля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Karrde
Нужно сконвертить из String^ в char.


String::ToCharArray

5.1K
26 апреля 2009 года
Karrde
88 / / 15.10.2007
Эээ. Не совсем понял. она конвертит из String в wchar_t. А для того, чтобы сконвертить окончательно в char*, необходимо wcstombs_s.
В общем, я взял этот код из учебника. походу он сначала конвертит из String^ в wchar_t, а потом из wchar_t в char*. И как раз первое действие проходит успешно. а вот на втором-запарывается. Извините, походу сначала неправильно выразился

 
Код:
cli::pin_ptr<const wchar_t> wch = PtrToStringChars(str);
            size_t convertedChars = 0;
            size_t sizeInBytes = (str->Length + 1) * 2;
            errno_t err = 0;
            char* ch = (char*)malloc(sizeInBytes);
            err = wcstombs_s(&convertedChars, ch, sizeInBytes, wch, sizeInBytes);
            if(err != 0)
                MessageBox::Show("wcstombs_s failed!\n");
            return(ch);
5
27 апреля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Karrde
Эээ. Не совсем понял.

Дык, я к C# привык :)
Там char свой.

Как вариант - использование кодовой страницы 1251:

 
Код:
char* GetChars(int codepage, System::String^ text) {
    array<System::Byte>^ text_bytes = System::Text::Encoding::GetEncoding(codepage)->GetBytes(text);
    char* result = new char[text_bytes->Length + 1];
    for(int i = 0; i < text_bytes->Length; ++i) {
        result = (char) text_bytes;
    }
    result[text_bytes->Length] = '\0';
    return result;
}

Получаем соответствующий объект Encoding, у которого требуем GetBytes - каждый байт собственно и будет C++ным char-ом.
240
29 апреля 2009 года
aks
2.5K / / 14.07.2006
Достаточно просто wcstombs. Она конвертит в соотвествии с установленной локалью. Установите нужную локаль в которой есть русские буквы и будет счастье.
Или вызывайте setlocale с пустой строкой в качестве имени локали - подгрузится локаль из окружения.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог