• 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());
    }
  • 相关阅读:
    信息检索笔记
    北大课程(变态心理学)
    My life
    Excel小技巧(随机点名)
    Flask基础
    CTF
    GDB
    LD_PRELOAD
    AFL-数据变异
    AFL入门
  • 原文地址:https://www.cnblogs.com/jiafenggang/p/4784615.html
Copyright © 2020-2023  润新知