Преобразовать std :: basic_string <Char>в строку - PullRequest
2 голосов
/ 05 января 2020

В то время как MediaInfoDLL возвращает метаданные (частота дискретизации, каналы, размер потока, заголовок ...) в формате std::basic_string<Char>, мне нужно преобразовать в строку, чтобы иметь возможность обрабатывать их позже. Например, mi.Get(Stream_Audio, 0, __T("Performer")) возвращает «Имя исполнителя» в формате std::basic_string<Char>.

Вы можете мне помочь?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 05 января 2020

Читая код C ++ библиотеки MediaInfoLib, кажется, есть две возможности. Библиотека определяет псевдоним типа String, и это тип, который вы видите.

Во-первых, вот определение типов Char и String:

namespace MediaInfoLib {

/* ... */

//Char types
#undef  __T
#define __T(__x)     __T(__x)
#if defined(UNICODE) || defined (_UNICODE)
    typedef wchar_t Char;                    ///< Unicode/Ansi independant char
    #undef  __T
    #define __T(__x) L ## __x
#else
    typedef char Char;                       ///< Unicode/Ansi independant char
    #undef  __T
    #define __T(__x) __x
#endif

typedef std::basic_string<MediaInfoLib::Char> String;  ///< Unicode/Ansi independant string

/* ... */

}  // end namespace

Если макрос UNICODE или _UNICODE был определен при сборке библиотеки, то типом является std::basic_string<wchar_t>, то есть std::wstring в стандартной библиотеке .

Чтобы преобразовать это в std::string, посмотрите этот вопрос: Как преобразовать wstring в строку?

Самый простой ответ там использует std::wstring_convert.

Если макрос UNICODE или _UNICODE НЕ был определен при сборке библиотеки, тогда MediaInfoLib::Char - это тип char, а тип MediaInfoLib::String - std::basic_string<char> уже std::string. То есть, в этом случае тип возвращаемого значения уже std :: string .

0 голосов
/ 05 января 2020

Преобразовать std::basic_string<Char> в строку ... Да, это встроенный тип char

Если Char является псевдонимом char, то std::basic_string<Char> уже std::string. Преобразование не требуется, поскольку оно того же типа.

...