std::wstring<-->std::string,char<-->wchar_t

#include<iostream>
#include<codecvt>
#include<string>

using namespace std;
//vs中将string->wstring
//问题:对中文不支持
wstring utf8_to_wstring(const std::string& str){
    wstring_convert<codecvt_utf8<wchar_t>> mconv;
    return mconv.from_bytes(str);
}
//vs中将wstring->string
//问题:对中文不支持
string wstring_to_utf8(const wstring& wstr){
    wstring_convert<codecvt_utf8<wchar_t>> mconv;
    return mconv.to_bytes(wstr);
}
int main(){
    wstring wstr= utf8_to_wstring(string("jiafenggang"));
    wcout << wstr << endl;

    wstring wstr1 = L"jiafenggang";
    string str = wstring_to_utf8(wstr1);
    cout << str << endl;
    return 0;
}

如果要对中文支持还是需要WideCharToMultiByte和MultiByteToWideChar

#pragma once
#include<Windows.h>
#include<string>

class UTIL
{
public:
	//功能:将char数组 转换为wchar_t数组
	//*ansi->char数组
	//返回:生成的wchar_t数组
	//注意:用户负责释放返回数组内存
	//约定:不会改变用户传入的参数,但用户可以改变返回值
	static PWSTR ansi2unic(PCSTR ansi);
	//功能:将wchar_t数组 转换为char数组
	//*unic->wchar_t数组
	//返回:生成的char数组
	//注意:用户负责释放返回数组内存
	//约定:不会改变用户传入的参数,但用户可以改变返回值
	static PSTR	unic2ansi(PCWSTR unic);
	//功能:将wchar_t数组 转换为string
	//*unic->wchar_t数组
	//返回:生成的string
	//约定:不会改变用户传入的参数,但用户可以改变返回值
	static std::string unic2str(const wchar_t* unic);
	//功能:将string 转换为wchar_t数组
	//*str->要转换的string
	//返回:生成的wchar_t数组
	//注意:用户负责释放返回数组内存
	//约定:不会改变用户传入的参数,但用户可以改变返回值
	static wchar_t* str2unic(const std::string& str);
private:

};

  


#include"util.h"

PWSTR UTIL::ansi2unic(PCSTR ansiStr){
    PWSTR unicStr=NULL;
    DWORD len = MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, unicStr, 0);
    unicStr = new wchar_t[len];
    MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, unicStr, len);
    return unicStr;
}

PSTR UTIL::unic2ansi(PCWSTR unicStr){
    PSTR ansiStr=NULL;
    DWORD len = WideCharToMultiByte(CP_ACP, 0, unicStr, -1, ansiStr, 0,NULL,NULL);
    ansiStr = new char[len];
    WideCharToMultiByte(CP_ACP, 0, unicStr, -1, ansiStr, len, NULL, NULL);
    return ansiStr;
}

std::string UTIL::unic2str(const wchar_t* unicStr){
    const char* p = unic2ansi(unicStr);
    std::string str(p);
    delete p;
    return str;
}

wchar_t* UTIL::str2unic(const std::string& str){
    return ansi2unic(str.c_str());
}

 

转载于:https://www.cnblogs.com/jiafenggang/p/4784615.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值