Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.65/57: Рейтинг темы: голосов - 57, средняя оценка - 4.65
GetHelp
60 / 61 / 11
Регистрация: 27.02.2013
Сообщений: 1,112
#1

Std::string and std::wstring convert

02.10.2014, 11:47. Просмотров 10208. Ответов 20
Метки нет (Все метки)

случайно наткнулся на такую вот конвертацию std::string в std::wstring

C++
1
2
3
std::string text("text");
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wtext = converter.from_bytes(text);
а как можно сделать обратное преобразование? т.е. std::wstring в std::string? чтоб только вот как то по аналогии в пару строк можно было...

Добавлено через 2 минуты
а все отбой там же еще есть метод to_bytes тупанул

Добавлено через 15 часов 49 минут
погодите ка, написал вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
std::wstring to_wstring(const std::string& text)
{
    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
    return converter.from_bytes(text);
}
 
std::string to_string(const std::wstring& text)
{
    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
    return converter.to_bytes(text);
}
но при попытке сконвертить русские символы падает с ошибкой "Необработанное исключение по адресу..."

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2014, 11:47
Ответы с готовыми решениями:

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2...

Как правильно перевести std::wstring в std::string ?
Собственно как? :)

Как привести std::wstring к std::string?
Как привести std::wstring к std::string?

Конвертация из std::string в std::wstring
В std::string находятся прочитанные данные из файла, в котором содержатся...

std::string -> std::wstring
Как перевести данный код в код с использованием wstring ( посути использовать...

20
kzru_hunter
1108 / 777 / 99
Регистрация: 01.02.2011
Сообщений: 1,779
Записей в блоге: 1
18.11.2015, 20:17 #21
Tulosba Ага, спс за поправку насчет утечки. Переделал снова немного К сожалению, unique-ptr не использовал (с ним быстрее выполняется где-то на 5%), т.к. решил укоротить функцию StrStr за счет использования двух других.
Цитата Сообщение от Tulosba Посмотреть сообщение
P.S. И как мне кажется, можно вообще обойтись стандартными (c++11) средствами, без виндозных MultiByteToWideChar. Поправьте, если ошибаюсь.
По-моему, эти функции по скорости преобразования самые быстрые, чем использование каких-либо других средств.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
namespace convert
{
    // конвертирует std::string -> [ResultCodePage] -> std::wstring
    int StrToWStr(std::wstring &dest, const std::string &source, UINT ResultCodePage = CP_ACP, DWORD dwFlags = 0) // параметры см. в MultiByteToWideChar
    {
        dest.resize(source.length() +1);                
        return MultiByteToWideChar(ResultCodePage, dwFlags, source.c_str(), source.length(), (WCHAR*)dest.c_str(), source.length() + 1);
    }
 
    // конвертирует std::wstring -> [ResultCodePage] -> std::string
    int WStrToStr(std::string &dest, const std::wstring &source, UINT ResultCodePage = CP_ACP, DWORD dwFlags = 0) // параметры см. в WideCharToMultiByte
    {
        int dest_len = WideCharToMultiByte(ResultCodePage, dwFlags, source.c_str(), source.length(), (LPSTR)dest.c_str(), 0, NULL, NULL);
        dest.resize(dest_len);      
        WideCharToMultiByte(ResultCodePage, dwFlags, source.c_str(), source.length(), (LPSTR)dest.c_str(), dest_len, NULL, NULL);
 
        return dest_len;
    }       
 
    // конвертирует std::string -> [ResultCodePage] -> std::string
    int StrToStr(std::string& dest, const std::string& source, UINT ResultCodePage = CP_ACP, DWORD dwFlags = 0) // параметры см. в WideCharToMultiByte
    {
        std::wstring wstr; StrToWStr(wstr, source);
        return WStrToStr(dest, wstr, ResultCodePage, dwFlags);      
    }
}
0
18.11.2015, 20:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2015, 20:17

ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
int main() { string fileName, currWord, currMax = &quot;&quot;; cin&gt;&gt;fileName;...

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в...

Ошибка Cannot convert std::string to void*
Не могу сконвертировать строку в void*: std::string str; (void*)str; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru