C++字符串编码转换

在C++经常遇到字符串的编码转换,写了个通用类,供大家参考。head文件wide_string.h内容如下:

/*
 * 宽字符串
 
*/
class  WideString
{

    
// wchar_t;
    wchar_t *  ws;
    
// 初始化
     void  init( char * , unsigned  int );

    
public :
        
/*
         * 构造函数,将传入的字符串转换成wchar_t;
         
*/
        WideString(
char * );
        
/*
         * 构造函数,将传入的字符串转换成wchar_t;
         
*/
        WideString(
char * , unsigned  int );
        
/*
         * 析构函数,释放wchar_t;
         
*/
        
~ WideString();
        
/*
         * 转换成UTF-8字符串
         
*/
        
void  toUTF8String( char * );
        
/*
         * 获取UTF-8字符串长度
         
*/
        unsigned 
int  getUTF8StringLength();
        
/*
         * 转换成默认编码字符串
         
*/
        
void  toDefaultString( char * );
        
/*
         * 获取默认编码字符串长度
         
*/
        unsigned 
int  getDefaultStringLength();
        
/*
         * 转换成MultiBytes字符串
         
*/
        
void  toMultiBytesString( char * , unsigned  int );
        
/*
         * 获取MultiBytes字符串长度
         
*/
        unsigned 
int  getMultiBytesStringLength(unsigned  int );
};

wide_string.cpp内容如下:

#include  < windows.h >
#include 
" wide_string.h "


// 创建函数
WideString::WideString( char *  cs)
{
    
this -> init(cs, CP_ACP);
}
// 创建函数
WideString::WideString( char *  cs, unsigned  int  codePage)
{
    
this -> init(cs, codePage);
}
// 初始化操作
void  WideString::init( char *  cs, unsigned  int  codePage)
{
    
int  wsLength  =   0 ;
    wsLength 
=  MultiByteToWideChar(codePage, 0 ,cs, - 1 ,NULL,NULL);   // 获取转换到Unicode编码后所需要的字符空间长度
     this -> ws  =   new  wchar_t[wsLength  +   1 ];
    wsLength 
=  MultiByteToWideChar(codePage, 0 ,cs, - 1 , this -> ws ,wsLength);   // 转换到Unicode编码
     if ( ! wsLength)   // 转换失败则出错退出
         return ;
}
// 析构函数
WideString:: ~ WideString()
{
    
if ( this -> ws)
    {
        delete []
this -> ws;
    }
}

// 获取转换的UTF8字符串长度
unsigned  int  WideString::getUTF8StringLength()
{
    
return   this -> getMultiBytesStringLength(CP_UTF8);
}
// 转换的UTF8字符串
void  WideString::toUTF8String( char *  cs)
{
    
this -> toMultiBytesString(cs, CP_UTF8);
}
// 获取转换的默认编码字符串长度
unsigned  int  WideString::getDefaultStringLength()
{
    
return   this -> getMultiBytesStringLength(CP_ACP);
}
// 转换的默认编码字符串
void  WideString::toDefaultString( char *  cs)
{
    
this -> toMultiBytesString(cs, CP_ACP);
}
// 获取转换的MultiBytes字符串长度
unsigned  int  WideString::getMultiBytesStringLength(unsigned  int  codePage)
{
    
int  mbLength  =   0 ;
    mbLength 
=  WideCharToMultiByte(codePage, 0 , this -> ws, - 1 ,NULL, 0 ,NULL,NULL);   // 获取转换到MultiBytes编码后所需要的字符空间长度
     return  mbLength;
}
// 转换的MultiBytes字符串
void  WideString::toMultiBytesString( char *  cs, unsigned  int  codePage)
{
    
int  mbLength  =   0 ;
    mbLength 
=  WideCharToMultiByte(codePage, 0 , this -> ws, - 1 ,NULL, 0 ,NULL,NULL);   // 获取转换到MultiBytes编码后所需要的字符空间长度
     if ( strlen(cs)  <  mbLength)
    {
         
throw  ;
    }
    mbLength 
=  WideCharToMultiByte(codePage, 0 , this -> ws, - 1 ,cs,mbLength,NULL,NULL);   // 转换到MultiBytes编码
     if ( ! mbLength)
    {
        
return ;
    }
}


 

 

转载于:https://www.cnblogs.com/heroking2000/archive/2010/06/10/1755926.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>