精华内容
下载资源
问答
  • char 转wchar_twchar_t转char的实现函数及原理说明
  • char 转wchar_twchar_t转char 原文来自 http://haofu123.blog.163.com/blog/static/178294920096243161997/ 利用widechartomultibyte来转换的函数 通常适合于window平台上使用 #include  #include  int _...
    char 转wchar_t 及wchar_t转char
    原文来自 http://haofu123.blog.163.com/blog/static/178294920096243161997/

    利用widechartomultibyte来转换的函数

    通常适合于window平台上使用

    #include 

    #include 

    int  _tmain( int  argc,  _tchar*  argv[])

    {

    wchar_t  pwstr[]  =l"我是中国人";

    wchar_t  pwstr2[20];

            char  *pcstr  ( char  *)malloc( sizeof( char)*(2  wcslen(pwstr)+1));

            memset(pcstr  wcslen(pwstr)+1  );

            w2c(pcstr,pwstr,2  wcslen(pwstr)+1)  ;

            printf("%s\n",pcstr);

    c2w(pwstr2,20,pcstr);

    wprintf(l"%s",pwstr2);

            free(pcstr)  ;

    return  0;

    }

    // 将wchar_t* 转成char*的实现函数如下:

    char  *w2c( char  *pcstr, const  wchar_t  *pwstr,  size_t  len)

    {

    int  nlength=wcslen(pwstr);

    // 获取转换后的长度

    int  nbytes  WideCharToMultiByte(  0,  //  specify the code page used to perform the conversion

    0,                  //  no special flags to handle unmapped characters

    pwstr,          //  wide character string to convert

    nlength,      //  the number of wide characters in that string

    NULL,            //  no output buffer given, we just want to know how long it needs to be

    0,

    NULL,            //  no replacement character given

    NULL  );        //  we don't want to know if character didn't make it through the translation

    //  make sure the buffer is big enough for this, making it larger if necessary

    if(nbytes>len)      nbytes=len;

    //  通过以上得到的结果,转换unicode 字符为ascii 字符

    WideCharToMultiByte(  0,  //  specify the code page used to perform the conversion

    0,                  //  no special flags to handle unmapped characters

    pwstr,      //  wide character string to convert

    nlength,      //  the number of wide characters in that string

    pcstr,  //  put the output ascii characters at the end of the buffer

    nbytes,                                                      //  there is at least this much space there

    NULL,            //  no replacement character given

    NULL  );

    return  pcstr  ;

    }

    // 将char* 转成wchar_t*的实现函数如下:

    // 这是把asii字符转换为unicode字符,和上面相同的原理

    void  c2w(wchar_t  *pwstr,size_t  len, const  char  *str)

    {

    if(str)

            {

                size_t  nu  strlen(str);

                size_t  =(size_t)multibytetowidechar(cp_acp,0,( const  char  *)str,( int)nu, null,0);

                if(n>=len)n=len-1;

                multibytetowidechar(cp_acp,0,( const  char  *)str,( int)nu,pwstr,( int)n);

          pwstr[n]=0;

            }

    }

    或者用此种方法更好一些:============我自已做的

    // 把ascii 字符转换为unicode字符

    wchar_t*  Cphone_hq::ctow(wchar_t  *pwstr,  const  char  *str)

    {

    wchar_t*  buffer;

    if(str)

            {

                size_t  nu  strlen(str);

                size_t  =(size_t)MultiByteToWideChar(CP_ACP,0,( const  char  *)str, int(nu),NULL,0);

          buffer=0;

                buffer  new  wchar_t[n+1];

                // if(n>=len) n=len-1;

          ::MultiByteToWideChar(CP_ACP,0,( const  char  *)str, int(nu),buffer, int(n));       

          }

    return  buffer;

    delete  buffer;

    }

    相关知识点:

    Unicode的出现是为了适应软件国际化的需要。Unicode不同于双字节字符集(DBCS)。

    一、相关操作函数

           1、DBCS使用下面的函数操作字符串:

                 CharNext——获得后一个字符

                CharPrev——获得前一个字符

                IsDBCSLeadByte——判断是否为两个字节字符的第一个字节

                C++运行期库提供了以"_mbs"开头的一系列的函数操作DBCS。类似的函数有_mbscat等。

           2、ANSI字符集是一个美国标准。C++运行期库提供了以"str"开头的一些列的函数操作此字符集。

           3、C++运行期库为Unicode字符集提供了一系列以"wcs"开头的函数。

    二、对应的数据类型

           1、对于ANSI字符定义为char。

            2、对于Unicode的字符定义为wchar_t。

    三、使用环境

           1、首先要说明的是Win98对于Unicode的支持是很微弱的,所以如果要在Win98上运行Unicode编译的程序,可能造成运行错误或者失败。

           2、 由于Win2000及以后的OS的内核都是使用Unicode编写的,所以虽然可以在其上运行ANSI编码的程序,但是其运行过程中很多地方都需要将 ANSI转换为Unicode以后,调用Unicode版本的函数,因为这个转换的过程存在所以ANSI的程序运行效率不高。在Win2000上最好使用 Unicode编写程序。

    四、编写通用的程序

           1、在编程的时候使用TCHAR数据类型,此类型能够根据预编译宏的定义,将其转换为ANSI或者是Unicode。

           2、预编译宏_MBCS、_UNICODE和UNICODE。_MBCS是多字节和ANSI字符串的编译宏。此时TCHAR将转换为char。_UNICODE和UNICODE是Unicode编码的预编译宏,TCHAR将转换为wchar_t。

           3、_UNICODE和UNICODE与_MBCS不能在编译的时候同时被定义。

           4、_UNICODE宏用于C运行期库的头文件,UNICODE宏用于Windows头文件。一般同时定义这两个宏。

    五、转换函数

           1、Unicode转换为ANSI使用:MultiByteToWideChar。

           2、ANSI转换为Unicode使用:WideCharToMultiByte。

     

    宽字符转多字符:

           size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count );

    多字符转宽字符:

           size_t mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count );

           另:L"ab"是C/C++标准宏,使用上是没有问题的

          1、client 里有些函数接口需要unicode,这些由于资源也在本地,可以直接使用MultiByteToWideChar或者mbstowcs+setlocale 转换

           2、对于需要从 中文client->服务器->韩文client的方式下,在传文本的情况下,需要将文字的语言代码一起传出去,在接受端可以使用指定的代 码,转换。服务器如有必要的话,也可以使用该代码转换,这样就可以在client上同时显示多国语言了

    展开全文
  • c++ wchar_t char

    2018-11-13 16:12:23
    wcstombs   函数定义 编辑 wcstombs - 将宽字符转换成多...size_t wcstombs(char *dest, const wchar_t *src, size_t n); 说明: 如dest 非NULL,则wcstombs() function把宽字符src转换成多字符dest,最多...

    wcstombs

     

    函数定义

    编辑

    wcstombs - 将宽字符转换成多字符

    头文件:

    #include <stdlib.h>

    原型

    size_t wcstombs(char *dest, const wchar_t *src, size_t n);

    说明:

    如dest 非NULL,则wcstombs() function把宽字符src转换成多字符dest,最多转换n个字节(这里的n是转换后dest的字节数)。

    返回值:

    转换成功,返回转换的字节数(不包括0字符),不成功返回(size_t)(-1)。

    更多讲解参见man手册。

    展开全文
  • char w_char_twchar_t转char

    千次阅读 2010-09-04 14:38:00
    char 转wchar_twchar_t转char 原文来自 http://haofu123.blog.163.com/blog/static/178294920096243161997/ 利用widechartomultibyte来转换的函数 通常适合于window平台上使用#include <tchar.h>...

    char 转wchar_t 及wchar_t转char

    原文来自 http://haofu123.blog.163.com/blog/static/178294920096243161997/

    利用widechartomultibyte来转换的函数

    通常适合于window平台上使用

    #include  < tchar.h >

    #include 
    < windows.h >

    int  _tmain( int  argc, _tchar *  argv[])

    {

    wchar_t pwstr[] 
    = l " 我是中国人 " ;

    wchar_t pwstr2[
    20 ];

        
    char   * pcstr  =  ( char   * )malloc( sizeof ( char ) * ( 2   *  wcslen(pwstr) + 1 ));

        memset(pcstr , 
    0  ,  2   *  wcslen(pwstr) + 1  );

        w2c(pcstr,pwstr,
    2   *  wcslen(pwstr) + 1 ) ;

        printf(
    " %s/n " ,pcstr);

    c2w(pwstr2,
    20 ,pcstr);

    wprintf(l
    " %s " ,pwstr2);

        free(pcstr) ;

    return   0 ;

    }

    // 将wchar_t* 转成char*的实现函数如下:

    char   * w2c( char   * pcstr, const  wchar_t  * pwstr, size_t len)

    {

    int  nlength = wcslen(pwstr);

    // 获取转换后的长度

    int  nbytes  =  WideCharToMultiByte(  0 //  specify the code page used to perform the conversion

    0 ,          //  no special flags to handle unmapped characters

    pwstr,     
    //  wide character string to convert

    nlength,   
    //  the number of wide characters in that string

    NULL,      
    //  no output buffer given, we just want to know how long it needs to be

    0 ,

    NULL,      
    //  no replacement character given

    NULL );    
    //  we don't want to know if a character didn't make it through the translation

    //  make sure the buffer is big enough for this, making it larger if necessary

    if (nbytes > len)   nbytes = len;

    //  通过以上得到的结果,转换unicode 字符为ascii 字符

    WideCharToMultiByte( 
    0 //  specify the code page used to perform the conversion

    0 ,          //  no special flags to handle unmapped characters

    pwstr,   
    //  wide character string to convert

    nlength,   
    //  the number of wide characters in that string

    pcstr, 
    //  put the output ascii characters at the end of the buffer

    nbytes,                           
    //  there is at least this much space there

    NULL,      
    //  no replacement character given

    NULL );

    return  pcstr ;

    }

    // 将char* 转成wchar_t*的实现函数如下:

    // 这是把asii字符转换为unicode字符,和上面相同的原理

    void  c2w(wchar_t  * pwstr,size_t len, const   char   * str)

    {

    if (str)

        {

          size_t nu 
    =  strlen(str);

          size_t n 
    = (size_t)multibytetowidechar(cp_acp, 0 ,( const   char   * )str,( int )nu, null , 0 );

          
    if (n >= len)n = len - 1 ;

          multibytetowidechar(cp_acp,
    0 ,( const   char   * )str,( int )nu,pwstr,( int )n);

       pwstr[n]
    = 0 ;

        }

    }

    或者用此种方法更好一些:
    ============ 我自已做的

    // 把ascii 字符转换为unicode字符

    wchar_t
    *  Cphone_hq::ctow(wchar_t  * pwstr,  const   char   * str)

    {

    wchar_t
    *  buffer;

    if (str)

        {

          size_t nu 
    =  strlen(str);

          size_t n 
    = (size_t)MultiByteToWideChar(CP_ACP, 0 ,( const   char   * )str, int (nu),NULL, 0 );

       buffer
    = 0 ;

          buffer 
    =   new  wchar_t[n + 1 ];

          
    // if(n>=len) n=len-1;

       ::MultiByteToWideChar(CP_ACP,
    0 ,( const   char   * )str, int (nu),buffer, int (n));    

       }

    return  buffer;

    delete buffer;

    }

    相关知识点:

    Unicode的出现是为了适应软件国际化的需要。Unicode不同于双字节字符集(DBCS)。

    一、相关操作函数

           1、DBCS使用下面的函数操作字符串:

                 CharNext——获得后一个字符

                CharPrev——获得前一个字符

                IsDBCSLeadByte——判断是否为两个字节字符的第一个字节

                C++运行期库提供了以"_mbs"开头的一系列的函数操作DBCS。类似的函数有_mbscat等。

           2、ANSI字符集是一个美国标准。C++运行期库提供了以"str"开头的一些列的函数操作此字符集。

           3、C++运行期库为Unicode字符集提供了一系列以"wcs"开头的函数。

    二、对应的数据类型

           1、对于ANSI字符定义为char。

            2、对于Unicode的字符定义为wchar_t。

    三、使用环境

           1、首先要说明的是Win98对于Unicode的支持是很微弱的,所以如果要在Win98上运行Unicode编译的程序,可能造成运行错误或者失败。

           2、由于Win2000及以后的OS的内核都是使用Unicode编写的,所以虽然可以在其上运行ANSI编码的程序,但是其运行过程中很多地方都需要将 ANSI转换为Unicode以后,调用Unicode版本的函数,因为这个转换的过程存在所以ANSI的程序运行效率不高。在Win2000上最好使用 Unicode编写程序。

    四、编写通用的程序

           1、在编程的时候使用TCHAR数据类型,此类型能够根据预编译宏的定义,将其转换为ANSI或者是Unicode。

           2、预编译宏_MBCS、_UNICODE和UNICODE。_MBCS是多字节和ANSI字符串的编译宏。此时TCHAR将转换为char。_UNICODE和UNICODE是Unicode编码的预编译宏,TCHAR将转换为wchar_t。

           3、_UNICODE和UNICODE与_MBCS不能在编译的时候同时被定义。

           4、_UNICODE宏用于C运行期库的头文件,UNICODE宏用于Windows头文件。一般同时定义这两个宏。

    五、转换函数

           1、Unicode转换为ANSI使用:MultiByteToWideChar。

           2、ANSI转换为Unicode使用:WideCharToMultiByte。

     

    宽字符转多字符:

           size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count );

    多字符转宽字符:

           size_t mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count );

           另:L"ab"是C/C++标准宏,使用上是没有问题的

          1、client 里有些函数接口需要unicode,这些由于资源也在本地,可以直接使用MultiByteToWideChar或者mbstowcs+setlocale 转换

           2、对于需要从中文client->服务器->韩文client的方式下,在传文本的情况下,需要将文字的语言代码一起传出去,在接受端可以使用指定的代码,转换。服务器如有必要的话,也可以使用该代码转换,这样就可以在client上同时显示多国语言了

    展开全文
  • #include 第一种方法 string tp;  wchar_t *s;  char *d;  tp=s;  d=tp.c_str();  第二种方法:自定义函数实现 ...void charTowchar(const char *chr, wchar_t *wchar, int size) { M

    wchar_t转char

    第一种方法

    string   tp; 
    wchar_t   *s; 
    char   *d; 
    tp=s; 
    d=tp.c_str(); 

    第二种方法:自定义函数实现

    #include <windows.h>
    #include <stdio.h>
    
    void charTowchar(const char *chr, wchar_t *wchar, int size)
    {   
    	MultiByteToWideChar( CP_ACP, 0, chr,
            strlen(chr)+1, wchar, size/sizeof(wchar[0]) );
    }
    
    void wcharTochar(const wchar_t *wchar, char *chr, int length)
    {
        WideCharToMultiByte( CP_ACP, 0, wchar, -1,
            chr, length, NULL, NULL );
    }
    
    int main (void)
    {
    	char     chr[128];
    	wchar_t  *wchar = L"你猜";
    	
    
    	//wchar_t to char
    	wcharTochar(wchar, chr, sizeof(chr));
    	printf("char is %s\n", chr);
    
    	//char to wchar_t
    	wchar = (wchar_t *)malloc(sizeof(wchar_t) * 64);
    	charTowchar(chr, wchar, sizeof(wchar_t) * 64);
    	
    	wprintf_s(L"%s\n", wchar);
    	getchar();
    	return 0;
    }


    wchar_t*转char*

    第一种方法

    wchar_t *wch=_T("你猜你猜"); 
    int size=WideCharToMultiByte(CP_ACP,0,wch,-1,NULL,0,NULL,NULL); 
    char *ch=new char[size+1]; 
    if(!WideCharToMultiByte(CP_ACP,0,wch,-1,ch,size,NULL,NULL)) 

        return false; 
    }

    wchar_t* wstr = L"A wide character string.";

    char* ascii = new char[wcslen(wstr) + 1];

    wcstombs( ascii, wstr, wcslen(wstr) );


    第二种方法

     size_t size;  

     int requiredSize;  

     requiredSize = wcstombs( NULL, pwchello, 0);

    pmbhello = (unsigned char *)malloc( requiredSize + 1);  

    size = wcstombs( pmbhello, pwchello, requiredSize + 1);

    char* 转换为 wchar_t*     

     size_t size; 

     int requiredSize;    

    requiredSize = mbstowcs(NULL, pmbhello, 0);  

    pwc = (wchar_t *)malloc( (requiredSize + 1) * sizeof( wchar_t ));  

    size = mbstowcs( pwc, pmbhello, requiredSize + 1);



    展开全文
  • 在处理中文时有时需要进行wchar_tchar,string,wstring之间的转换。 其中char和string之间、wchar_t和wstring之间的转换较为简单,代码在vs2010下测试通过。 代码如下:#include <iostream>#include <string>#...
  • unicode 编码下 wchar_t * char2wchar(const char* cchar, int & text_length) { wchar_t *m_wchar; int len = MultiByteToWideChar(CP_ACP, 0, cchar, strlen(cchar...
  • 1、区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数。 UNICODE:wchar_t是Unicode字符的数据类型,它实际定义在里: typedef unsigned short wchar_t;...
  • char wchar_t char16_t char32_t 区别 首先这几种字符类型的首要区别就是其占用存储空间的大小不同。char 有一个字节表示,wchar_t 宽体字符,由两个字符表示。char16_tchar32_t C++ 11 新增的字符类型,char16_t...
  • void main(int argc, char* argv[]) { //方法1. 使用stdlib中的库函数,需包含stdlib.h //wcstombs - 将宽字符转换成多字符 WCHAR ->... //wchar_t转char 方法1 wchar_t *p = L"hello world."; char descBuf[.
  • wchar_t* chatToWchar(const char* ch) { wchar_t *wchar; int len = MultiByteToWideChar(CP_ACP, 0, ch, strlen(ch), NULL, 0); wchar = new wchar_t[len + 1]; MultiByteToWideChar(CP_ACP, 0, ch, strlen(ch...
  • c++中wchar_tchar转换

    2014-07-05 21:16:29
    环境:Dev cpp 平台i386  C++标准中,wchar_t是宽字符类型,...其实知道了这个以后,要在wchar_tchar两种类型之间转换就不难实现了。  wchar_t 转换为char 的代码如下:  有如下的wchar_tchar变量  wcha
  • 区别wchar_t,char,WCHAR

    千次阅读 2019-01-10 09:31:52
    至:...1.区别wchar_t,char,WCHAR  ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数。 UNICODE:wchar_t是Unicode字符的数据类型,它实际定义在里: t...
  • #include//标准C++;   方式一: wchar_t--->char: string tp; wchar_t *s; char *d;...charwchar_t相互转化 ...关键字: charwchar_t相互转化 C代码 #include #include void charTowchar(const char
  • wchar_tchar转换

    2009-02-11 16:28:00
    C++标准中,wchar_t是宽字符类型,每个wchar_t...其实知道了这个以后,要在wchar_tchar两种类型之间转换就不难实现了。wchar_t 转换为char 的代码如下: 有如下的wchar_tchar变量:wchar_t w_cn = 中; char c_
  • 一、wchar_t类型的由来 我们知道char类型变量可以存储一个字节的字符,它用来保存英文字符和标点符号是可以的,但是对于汉字、韩文以及日文这样的字符却不可以,因为汉字、韩文以及日文每一个文字都占据两个字节,...
  • 1.区别wchar_t,char,WCHAR  ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数。  UNICODE:wchar_t是Unicode字符的数据类型,它实际定义在里:  typedef unsigned ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,531
精华内容 16,212
关键字:

wchar_t转char