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

Ваш аккаунт

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

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

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

Конвертация строк из типа CString в std::string

26K
21 мая 2008 года
metal_anton
27 / / 20.04.2008
как тока не пробовал конвертировать из CString в std::string
вот примерные попытки того что пробовал
 
Код:
CString from("а вот строка its is string");
 string to;
 to = (LPCTSTR) from;

// выводит  что  то  на подобии вот этого
// ёёёююёюююёю its is string
//или 123-=@>< its is string


Как я понимаю CString это UNICODE и занимает два байта, а std::string один байт и при переводе первые 127 символов берёт а остальные не берёт и как быть как конвертировать?? может у меня руки не из того места?? но вроде всё опробовал сделать))(под visual studio 2005)

Так же юзал такие функции как WideCharToMultiByte и MultiByteToWideChar так же не помогло или же в разных вариантах получаю строку типа 123-=@>< вместо строки русских символов. Скажите может у CString-а есть метод перекодировки?? и так тоже пробовал впринципе одинаковые примеры посути
 
Код:
CString src;
string dst(static_cast<LPCSTR>(src));
11
21 мая 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: metal_anton
как тока не пробовал конвертировать из CString в std::string
вот примерные попытки того что пробовал
 
Код:
CString from("а вот строка its is string");
 string to;
 to = (LPCTSTR) from;

// выводит  что  то  на подобии вот этого
// ёёёююёюююёю its is string
//или 123-=@>< its is string


Как я понимаю CString это UNICODE и занимает два байта, а std::string один байт и при переводе первые 127 символов берёт а остальные не берёт и как быть как конвертировать?? может у меня руки не из того места?? но вроде всё опробовал сделать))(под visual studio 2005)

Так же юзал такие функции как WideCharToMultiByte и MultiByteToWideChar так же не помогло или же в разных вариантах получаю строку типа 123-=@>< вместо строки русских символов. Скажите может у CString-а есть метод перекодировки?? и так тоже пробовал впринципе одинаковые примеры посути
 
Код:
CString src;
string dst(static_cast<LPCSTR>(src));



 
Код:
CString from("а вот строка its is string");
 string to;
 to = from.GetString();
1.8K
21 мая 2008 года
_const_
229 / / 26.11.2003
 
Код:
CString strFrom = _T("This is a Unicode string");
std::string strTo;
strTo.resize(strFrom.GetLength());
WideCharToMultiByte(CP_ACP, 0, strFrom, -1, &strTo[0], strTo.size(), NULL, NULL);
26K
21 мая 2008 года
metal_anton
27 / / 20.04.2008
Цитата: oxotnik333

 
Код:
CString from("а вот строка its is string");
 string to;
 to = from.GetString();



Подпись не соответствует ответу:D на первых парах такую стоку перевёл пасиба,тока если в юникоде проект написан

 
Код:
#undef _UNICODE
#undef UNICODE

а так буду знать какая есть функция в MFC для CString
26K
21 мая 2008 года
metal_anton
27 / / 20.04.2008
Цитата: _const_
 
Код:
CString strFrom = _T("This is a Unicode string");
std::string strTo;
strTo.resize(strFrom.GetLength());
WideCharToMultiByte(CP_ACP, 0, strFrom, -1, &strTo[0], strTo.size(), NULL, NULL);


спасибо всё получилось здорово работает а я понял почему у меня эта функция не работала я не так указывал &strTo[0] и -1 вот она и вылетала

240
22 мая 2008 года
aks
2.5K / / 14.07.2006
Цитата: metal_anton
спасибо всё получилось здорово работает а я понял почему у меня эта функция не работала я не так указывал &strTo[0] и -1 вот она и вылетала



Или как вариант вместо перекодирования исспользовать std::wstring.
впринципе в зависимости от значения макроса _UNICODE можно затайпдефить и строковой тип основанный на std::string или std::wstring
как это сделанно со строковыми типами в том же MFC или Здфеащкь SDK. )

26K
22 мая 2008 года
metal_anton
27 / / 20.04.2008
Цитата: aks
Или как вариант вместо перекодирования исспользовать std::wstring.
впринципе в зависимости от значения макроса _UNICODE можно затайпдефить и строковой тип основанный на std::string или std::wstring
как это сделанно со строковыми типами в том же MFC или Здфеащкь SDK. )



у меня четыре класса завязаны на std::string, много что в нём работает , а вот интерфейс пишется в MFC и четыре класса переделывать как то не с руки лучше метод (функцию) написать который переделывать будет и всё

240
23 мая 2008 года
aks
2.5K / / 14.07.2006
Я к тому, что более гамотно тоже сделать строки с кодировкой одной на весь проект, будь это стандартный std::basic_string, символ или MFC-шная строка. Чтоб они так же определяли кодировку из настроек проекта. )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог