Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перевести wchar_t в wstring? 
V
    Опции темы
darkmamba
Дата 16.4.2010, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 16.10.2008

Репутация: нет
Всего: 1



Код

deque<wstring> v;

...

struc info {
    char *data
}

void  Add(info* inf) {
    wstring ws;      

              v.push_back(ws);

    return;
}


info масив байт, в нем уникод строка. Как перевести строку в wstring что бы потом засунуть в вектор?

Это сообщение отредактировал(а) darkmamba - 16.4.2010, 22:03
PM MAIL   Вверх
jonie
Дата 16.4.2010, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Цитата


info масив байт, в нем уникод строка. 

а выглядит как char* ... но если вы уверены что это реальный юникод, притом именно такой какой нужен (размер wchar_t может меняться от платформы к платформе) и оно является NULL терминированной строкой тогда:
Код

wstring ws = reinterpret_cast<wchar_t*>(info.data);



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
darkmamba
Дата 16.4.2010, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 16.10.2008

Репутация: нет
Всего: 1



Юникод чистой воды, только не весь масив. С вашим кодом вылазят краказябры...
PM MAIL   Вверх
jonie
Дата 16.4.2010, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



darkmamba, hex дамп первых пяти символов масива data покажите, у меня сомнения что там юникод у вас + среда выполнения (nix\win\еще чета)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
darkmamba
Дата 16.4.2010, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 16.10.2008

Репутация: нет
Всего: 1



Код

000000 AD 01 31 8E BC 01 00 DA | 39 00 00 58 25 00 00 00     ­.1Ћј..Ъ9..X%...
000010 00 00 00 05 F7 10 49 47 | 00 65 00 6C 00 61 00 78     ....ч.IG.e.l.a.x
000020 00 79 00 31 00 33 00 78 | 00 54 00 4F 00 49 00 00     .y.1.3.x.T.O.I..
000030 00 02 00 00 00 01 00 00 | 00 26 00 00 00 00 00 00     .........&......


Среда win. Unicode с 0x17. 

Это английские буквы, русские сразу видно, что-то вроде 40 xx.

Это сообщение отредактировал(а) darkmamba - 16.4.2010, 22:34
PM MAIL   Вверх
jonie
Дата 16.4.2010, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



ну да, похоже на юникод (судя по всему американские символы, если, конечно диапазон подходящий, что тоже стОит проверить). Так вот если у вас с 0x17 байта начинается юникод тогда так и пишите:
Код

wstring ws = reinterpret_cast<wchar_t*>(info.data + 0x17); ....



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Alexeis
Дата 16.4.2010, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(darkmamba @  16.4.2010,  21:29 Найти цитируемый пост)
Unicode с 0x17. 

"Gelaxy13xTOI " UTF16-LE . Если что-то не получилось возможно неверно начало. Английские буквы имеют такую последовательность 0xXX00 т.е. сначала значимый потом 00. Проверьте смещение.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
darkmamba
Дата 16.4.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 16.10.2008

Репутация: нет
Всего: 1



Спасибо всем откликнувшимся, наверно дело в чем то другом. Добавляю в вектор, а когда извлекаю 
Код

wstring tmp = v.front();
v.pop_front();
wprintf(L"Stroka: %s\n", tmp);

Пишет S t r o k a : < N u l l >

Это сообщение отредактировал(а) darkmamba - 16.4.2010, 23:15
PM MAIL   Вверх
Alexeis
Дата 17.4.2010, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(darkmamba @  16.4.2010,  22:14 Найти цитируемый пост)
wstring tmp = v.front();

Почему же строка берется из начала вектора, хотя судя по коду он помещается в самый конец?

Цитата(darkmamba @  16.4.2010,  21:01 Найти цитируемый пост)
           v.push_back(ws);




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
darkmamba
Дата 18.4.2010, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 16.10.2008

Репутация: нет
Всего: 1



"Вектор" deque двухсторонний, из него можно хоть с конца брать, хоть с начала, как и добавлять  smile А проблема была просто в выводе строки как оказалось, 
Код

wprintf(L"Stroka: %s\n", tmp.data());
 вот так надо было.

А преобразование работает, спасибо большое, и за оперативность!)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.