C/C++学习笔记 各种字符转换记录

本文介绍了不同字符串类型间的转换方法,包括std::string与std::wstring、winrt::hstring与std::string、const char*与char*、QString与std::string以及QByteArray与QString之间的转换。这些转换对于跨平台应用开发及数据交换至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坐望云起

如果觉得有用,请不吝打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值