Re[2]: unicode К ansi
От: nen777w  
Дата: 20.12.10 16:39
Оценка:
держи
  "string_to_wstring/wstring_to_string"
#ifndef __string_algs_h__
#define __string_algs_h__

#include <locale>
#include <string>
#ifdef WIN
    #include <xstring>
#endif

namespace   string_algs
{
    inline std::wstring string_to_wstring( const char* in, std::locale loc  = std::locale() )
    {
        unsigned int len = (unsigned int) strlen( in );
        std::wstring out( len, 0 );
        const char *i = in, *ie = (in + len);
        std::wstring::iterator j = out.begin();

        for( ; i!=ie; ++i, ++j )
            *j = std::use_facet< std::ctype< wchar_t > > ( loc ).widen( *i );

        return out;
    }

    inline std::wstring string_to_wstring( const std::string& in, std::locale loc  = std::locale() )
    {
        std::wstring out( in.length(), 0 );
        std::string::const_iterator i = in.begin(), ie = in.end();
        std::wstring::iterator j = out.begin();

        for( ; i!=ie; ++i, ++j )
            *j = std::use_facet< std::ctype< wchar_t > > ( loc ).widen( *i );

        return out;
    }
    
    inline std::string wstring_to_string( const wchar_t* in, std::locale loc = std::locale() )
    {
        unsigned int len = (unsigned int) wcslen( in );
        std::string out( len, 0 );
        const wchar_t *i = in, *ie = (in + len);
        std::string::iterator j = out.begin();
        
        for( ; i!=ie; ++i, ++j )
            *j = std::use_facet< std::ctype< char > > ( loc ).widen( *i );
        
        return out;
    }
    
    inline std::string wstring_to_string( const std::wstring& in, std::locale loc = std::locale() )
    {
        std::string out( in.length(), 0 );
        std::wstring::const_iterator i = in.begin(), ie = in.end();
        std::string::iterator j = out.begin();
        
        for( ; i!=ie; ++i, ++j )
            *j = std::use_facet< std::ctype< char > > ( loc ).widen( *i );
        
        return out;
    }
}

#endif
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.