преобразование из std :: vector <char>в wchar_t * - PullRequest
1 голос
/ 29 июня 2010

Я пытаюсь прочитать кадры ID3 и их значения с помощью TagLib (1) и проиндексировать их с помощью CLucene (2).первый возвращает идентификаторы кадров как std::vector<char> (3), а второй записывает имена полей как tchar* [wchar_t* в Linux] (4).Мне нужно сделать связь между ними.Как я могу конвертировать из std::vector<char> в wchar_t* с помощью STL?спасибо

(1) http://developer.kde.org/~wheeler/taglib.html
(2) http://clucene.sourceforge.net/
(3) http://developer.kde.org/~wheeler/taglib/api/classTagLib_1_1ID3v2_1_1Frame.html#6aac53ec5893fd15164cd22c6bdb5dfd
(4) http://ohnopublishing.net/doc/clucene-0.9.21b/html/classlucene_1_1document_1_1Field.html#59b0082e2ade8c78a51a64fe99e684b2

Ответы [ 2 ]

1 голос
/ 29 июня 2010

В простом случае, когда ваши char s не содержат акцентированных символов или чего-либо подобного, вы можете просто скопировать каждый из них в пункт назначения и использовать его:

std::vector<char> frameID;

std::vector<wchar_t> field_name;

std::copy(frameID.begin(), frameID.end(), std::back_inserter(field_name));

lucene_write_field(&field_name[0], field_name.length());

Я предполагаю, чточто для идентификаторов кадров ID3 ​​у вас нет акцентированных символов и тому подобного, так что, вероятно, это все, что вам нужно.Если у вас есть возможность использовать акцентированные символы и тому подобное, то все становится более сложным в спешке - вам нужно будет конвертировать из чего-то вроде ISO 8859-x в (вероятно) UTF-16 Unicode.Для этого вам нужна кодовая страница, которая говорит вам, как интерпретировать ввод (т. Е. Существует несколько разновидностей ISO 8859, и одна для ввода на французском будет отличаться от, например, для русской).

0 голосов
/ 29 июня 2010

Чтобы большие значения символов не становились отрицательными значениями wchar_t, вам необходимо убедиться, что вы приводите значение без знака. Это работает, хотя я считаю, что это технически не определено:

unsigned char* uchar = reinterpret_cast<unsigned char*>(&vect[0]);

std::vector<wchar_t> vwchar(uchar, uchar + vect.size());

Это важно, если ваш текст содержит более 127 символов.

Также имейте в виду, что ни один из этих ответов не имеет отношения к UTF-чему-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...