提问人:user3204810 提问时间:1/6/2020 更新时间:1/11/2022 访问量:4518
转换 std::basic_string<Char> 到 string
Convert std::basic_string<Char> to string
问:
虽然MediaInfoDLL以格式返回元数据(采样率,通道,流大小,标题...),但我需要转换为字符串才能稍后处理它。例如,以格式返回“艺术家姓名”。std::basic_string<Char>
mi.Get(Stream_Audio, 0, __T("Performer"))
std::basic_string<Char>
你可以帮我吗?
先谢谢你
答:
转换为字符串 ...是的,这是内置类型字符
std::basic_string<Char>
如果 是 的别名,则 已经是 。不需要转换,因为它是同一类型。Char
char
std::basic_string<Char>
std::string
通读MediaInfoLib库的C++代码,似乎有两种可能性。该库定义了一个类型别名,这就是您看到的类型。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
如果宏 or 是在构建库时定义的,则类型为 ,在标准库中为 std::wstring
。UNICODE
_UNICODE
std::basic_string<wchar_t>
要转换这个 ,请看这个问题: 如何把wstring转换成string?std::string
最简单的答案是 .std::wstring_convert
如果宏 or 在构建库时未定义,则类型为 ,类型为 已为 。也就是说,在本例中,返回类型已经是 std::string。UNICODE
_UNICODE
MediaInfoLib::Char
char
MediaInfoLib::String
std::basic_string<char>
std::string
MediaInfo
作为依赖项,而依赖项又有自己的.你可以做这样的事情:ZenLib
Ztring
#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()
通过直接使用和跳过中介,您可以稍微提高效率。Ztring
mediainfoString
P.S. 在 C++17 中已弃用,可能不应该使用。std::wstring_convert()
评论
Char
char
mi.Get
mi
std::string
std::basic_string<char>