转换 std::basic_string<Char> 到 string

Convert std::basic_string<Char> to string

提问人:user3204810 提问时间:1/6/2020 更新时间:1/11/2022 访问量:4518

问:

虽然MediaInfoDLL以格式返回元数据(采样率,通道,流大小,标题...),但我需要转换为字符串才能稍后处理它。例如,以格式返回“艺术家姓名”。std::basic_string<Char>mi.Get(Stream_Audio, 0, __T("Performer"))std::basic_string<Char>

你可以帮我吗?

先谢谢你

C++ 字符串 类型转换 mediainfo

评论

2赞 NicholasM 1/6/2020
你的问题到底是什么?它等同于内置类型吗?如果是这样,我有一些好消息......Charchar
0赞 NicholasM 1/6/2020
另外,您能否提供指向您正在使用的库的 API 文档的链接?看到 .例如,什么是类型的?mi.Getmi
0赞 user3204810 1/6/2020
是的,这是内置类型字符。据我所知,这个库没有 API 文档
0赞 Pete Becker 1/6/2020
你说的“字符串”是什么意思? 是 的 typedef 名称。std::stringstd::basic_string<char>
1赞 Jérôme Martinez 1/6/2020
仅供参考,在大多数构建中(如果从源代码构建,则可调整),它被映射到 wchar_t。

答:

0赞 eerorika 1/6/2020 #1

转换为字符串 ...是的,这是内置类型字符std::basic_string<Char>

如果 是 的别名,则 已经是 。不需要转换,因为它是同一类型。Charcharstd::basic_string<Char>std::string

2赞 NicholasM 1/6/2020 #2

通读MediaInfoLib库的C++代码,似乎有两种可能性。该库定义了一个类型别名,这就是您看到的类型。String

首先,下面是 和 类型的定义:CharString

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

如果宏 or 是在构建库时定义的,则类型为 ,在标准库中为 std::wstringUNICODE_UNICODEstd::basic_string<wchar_t>

要转换这个 ,请看这个问题: 如何把wstring转换成string?std::string

最简单的答案是 .std::wstring_convert

如果宏 or 在构建库时未定义,则类型为 ,类型为 已为 。也就是说,在本例中,返回类型已经是 std::stringUNICODE_UNICODEMediaInfoLib::CharcharMediaInfoLib::Stringstd::basic_string<char>std::string

0赞 catalin 1/11/2022 #3

MediaInfo作为依赖项,而依赖项又有自己的.你可以做这样的事情:ZenLibZtring

#include "ZenLib/Ztring.h"
MediaInfoLib::String mediainfoString = mi.Get(Stream_Audio, 0, __T("Performer"));
ZenLib::Ztring zenlibZtring(mediainfoString);
std::string stdString = zenlibZtring.To_UTF8(); // or To_Local()

通过直接使用和跳过中介,您可以稍微提高效率。ZtringmediainfoString

P.S. 在 C++17 中已弃用,可能不应该使用。std::wstring_convert()