zoukankan      html  css  js  c++  java
  • 宽字符和窄字符的转换接口

    作者:朱金灿

    来源:http://blog.csdn.net/clever101

     

         宽字符和窄字符的转换需求很经常会遇到,今天从网上找了两个函数,修改了一下,奉献给大家。

    #include <string>
    #include <assert.h>
    
    std::wstring toWideString( const char* pStr,int len)
    {
    	assert(pStr) ; 
    	assert(len >= 0 || len == -1, _T("Invalid string length: ") << len ) ;
    
    	// figure out how many wide characters we are going to get 
    	int nChars = MultiByteToWideChar( CP_ACP , 0 , pStr , len , NULL , 0 ) ; 
    	if ( len == -1 )
    		-- nChars ; 
    	if ( nChars == 0 )
    		return L"" ;
    
    	// convert the narrow string to a wide string 
    	// nb: slightly naughty to write directly into the string like this
    	std::wstring buf;
    	buf.resize(nChars); 
    	::MultiByteToWideChar(CP_ACP,0,pStr,len,const_cast<wchar_t*>(buf.c_str()),nChars); 
    
    	return buf ;
    }
    
    std::wstring toWideString(const std::string& strA)
    {
    	const char* pStr = strA.c_str();
    	int len = strA.length();
        return toWideString(pStr,len);
    }
    
    std::string toNarrowString( const wchar_t* pStr,int len)
    {    
    	// figure out how many narrow characters we are going to get 
    	assert(pStr) ; 
    	assert(len >= 0 || len == -1 , _T("Invalid string length: ") << len ) ; 
    
    	int nChars = WideCharToMultiByte( CP_ACP , 0 , 
    		pStr , len , NULL , 0 , NULL , NULL ) ; 
    	if ( len == -1 )
    		-- nChars ; 
    	if ( nChars == 0 )
    		return "" ;
    
    	// convert the wide string to a narrow string
    	// nb: slightly naughty to write directly into the string like this
    	std::string buf ;
    	buf.resize(nChars);
    	WideCharToMultiByte(CP_ACP,0,pStr,len,const_cast<char*>(buf.c_str()),nChars,NULL,NULL); 
    
    	return buf ; 
    }
    
    std::string toNarrowString(const std::wstring& strW)
    {
    	const wchar_t* pStr = strW.c_str();
    	int len = strW.length();
        return toNarrowString(pStr,len);
    }
    
    

          有问题或者更好意见的话请联系我。

     

    参考文献:

     

    1. 如何升级基于STL的应用来支持Unicode


  • 相关阅读:
    python之路-笔录3[BOM&DOM&JQuery]
    python之路-笔录2[CSS&JS]
    python 文件读写方式
    python -- 数据可视化(二)
    Django权限机制的实现
    视频云存储使用介绍
    linux安装phantomjs
    基于redis实现分布式锁
    基于数据库实现分布式锁
    分布式锁
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470743.html
Copyright © 2011-2022 走看看