Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как перевести wchar_t в wstring?


Автор: darkmamba 16.4.2010, 22:01
Код

deque<wstring> v;

...

struc info {
    char *data
}

void  Add(info* inf) {
    wstring ws;      

              v.push_back(ws);

    return;
}


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

Автор: jonie 16.4.2010, 22:05
Цитата


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

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

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

Автор: darkmamba 16.4.2010, 22:12
Юникод чистой воды, только не весь масив. С вашим кодом вылазят краказябры...

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

Автор: darkmamba 16.4.2010, 22:29
Код

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.

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

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

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

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

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

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

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

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

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

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


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

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

А преобразование работает, спасибо большое, и за оперативность!)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)