一、std::string 和 std::wstring 互转
1、直接声明std::wstring
std::wstring uriImage{L"D:\\Project\\screen.jpg"};
Uri uri{ uriImage };
2、wstring_convert
由于C++17之后取消std::codecvt_utf8的支持,所以这个方法不是最好的。可以考虑使用WideCharToMultiByte和MultiByteToWideChar替代。
std::wstring wideString = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes(stringToConvert);
3、WideCharToMultiByte和MultiByteToWideChar
std::string MyTools::ConvertWideToANSI(const std::wstring& wstr)
{
int count = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.length(), NULL, 0, NULL, NULL);
std::string str(count, 0);
WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, &str[0], count, NULL, NULL);
return str;
}
std::wstring MyTools::ConvertAnsiToWide(const std::string& str)
{
int count = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), NULL, 0);
std::wstring wstr(count, 0);
MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), &wstr[0], count);
return wstr;
}
std::string MyTools::ConvertWideToUtf8(const std::wstring& wstr)
{
int count = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), wstr.length(), NULL, 0, NULL, NULL);
std::string str(count, 0);
WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, &str[0], count, NULL, NULL);
return str;
}
std::wstring MyTools::ConvertUtf8ToWide(const std::string& str)
{
int count = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), NULL, 0);
std::wstring wstr(count, 0);
MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), &wstr[0], count);
return wstr;
}
二、winrt::hstring 和 std::string 互转
winrt::hstring是C++/WinRT 的自定义字符串类型(在 C++/WinRT 基础库中定义,即%WindowsSdkDir%Include\<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h)。
// 直接声明一个winrt::hstring
winrt::hstring w{L"zh-CN"};
// 调用winrt::to_hstring方法直接把std::string转为winrt::hstring
winrt::hstring htr = winrt::to_hstring("this is a std string");
// 调用winrt::to_string转为std::string
winrt::hstring w{L"zh-CN1111测试"};
std::string temp = winrt::to_string(w);
三、const char* 和 char* 互转
1、const char*转char*
const char *filePath= "abc";
char *newPath = const_cast<char *>(filePath);
2、 char*转const char*
直接赋值即可
const char* cpc;
char* pc = "abcde";
cpc = pc;
四、QString 和 std::string 互转
std::string a = "asdfg";
QString path = QString::fromStdString("asdfg");
std::string d = path.toStdString();
五、QByteArray 和 QString 互转
//QByteArray转为QString:
QByteArray ba("abc123");
QString str = ba; //方法一
qDebug()<<str ;
//输出:"abc123"
//QString转为QByteArray:
QString str("abc123");
QByteArray ba = str.toUtf8(); //方法二
qDebug()<<ba;