zoukankan      html  css  js  c++  java
  • 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());
    }
  • 相关阅读:
    jquery中$.get()提交和$.post()提交有区别吗?
    数据库连接池的原理。为什么要使用连接池。
    execute,executeQuery,executeUpdate的区别是什么?
    数据库的三级模式与二级映像
    KMP算法(超容易理解的next数组求法)
    软件危机(含通俗理解帮助记忆)
    O(1)复杂度求一个栈的最小值
    操作系统进程状态模型
    判断单链表是否有环,如果有环则找到其环的入口
    两个单链表判断是否相交
  • 原文地址:https://www.cnblogs.com/jiafenggang/p/4784615.html
Copyright © 2011-2022 走看看