`
sealbird
  • 浏览: 584052 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

wchar 与 char 的互换

 
阅读更多
 #include <iostream>   
 #include <stdio.h>

#include <windows.h>

 using namespace std;
//#include <tchar.h>
char *w2c(char *pcstr,const wchar_t *pwstr, size_t len);
void c2w(wchar_t *pwstr,size_t len,const char *str);
int main(int argc, char* argv[])
{
wchar_t pwstr[] =L"我是中国人";
printf("===============");
wprintf(L"原始数据 pwstr:%s",pwstr);
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("wchar=>char result:%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;
//}
分享到:
评论

相关推荐

    WCHAR和CHAR互转小例子

    在编程领域,尤其是在Windows系统和C++编程中,`WCHAR` 和 `CHAR` 是两种常用的字符类型。它们分别代表宽字符和窄字符,用于处理不同的字符编码,尤其是在处理多语言和Unicode支持时。本文将深入讲解这两个类型,并...

    char与wchar_t互转

    ### C++中char与wchar_t互转方法解析 在C++编程中,字符编码的转换是常见的需求之一,尤其是在处理不同编码格式的文本时。本文将详细介绍如何在C++中实现`char`类型与`wchar_t`类型的互相转换,并通过具体的代码...

    char 转wchar_t 及wchar_t转char

    char 转wchar_t 及wchar_t转char的实现函数及原理说明

    char TCHAR WCHAR区别

    ### char、TCHAR、WCHAR 的区别与应用 在C/C++编程中,尤其是在Windows平台上的开发中,正确理解和使用`char`、`TCHAR`、`WCHAR`这三种字符类型对于处理文本数据至关重要。下面我们将深入探讨这三种类型的特点、...

    char wchar_t 之间的转换程序

    实现char wchar_t 之间的转换程序

    wchar_t*转换为char*

    在C++编程中,`wchar_t` 和 `char` 是两种不同的字符类型,它们分别用于处理宽字符和窄字符。`wchar_t` 通常用于表示多字节字符,如Unicode编码,而 `char` 通常用于ASCII编码。当需要在两者之间进行转换时,必须...

    CString-const-char-char-to-WCHAR.rar_CString To Char_char wchar_

    本文将详细讲解如何在UNICODE环境下,使用C++的CString类进行宽字符(WCHAR)与const char及char之间的转换。这些转换在处理字符串资源,如文件路径、用户输入或系统API调用时至关重要。 首先,`CString`是...

    VC++中的char,wchar_t,TCHAR

    VC++中的char,wchar_t,TCHAR详解 在VC++中,char、wchar_t和TCHAR是三个非常重要的字符类型,它们之间的区别和使用方法是初学者需要了解的基础知识。下面我们将详细介绍这三个字符类型的概念、用法和区别。 一、...

    CString、LPCTSTR、LPTSTR、TCHAR、WCHAR、string、wchar_t、char解析

    本文将深入解析几种常见的字符串类型,包括`CString`、`LPCTSTR`、`LPTSTR`、`TCHAR`、`WCHAR`、`string`、`wchar_t`和`char`。 1. `CString`:`CString`是Microsoft MFC(Microsoft Foundation Classes)库中定义...

    VC++中的char wchar_T和TCHAR

    ### VC++中的char, wchar_T和TCHAR详解 在VC++开发环境中,处理文本数据时,程序员经常会遇到三种字符类型:`char`、`wchar_T` 和 `TCHAR`。这些类型的选择对于确保代码的兼容性和效率至关重要。本文将详细介绍这三...

    VC++中的char_wchar_T和TCHAR

    详细的介绍了char wchar TCHAR的联系和区别,非常适合初学者了解

    浅谈c++ 字符类型总结区别wchar_t,char,WCHAR

    1、区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数。 UNICODE:wchar_t是Unicode字符的数据类型,它实际定义在里: typedef unsigned short wchar_t;...

    C++char无法转为LPCWSTR的解决方法收集。

    C++中char无法转换为LPCWSTR是由于类型不兼容引起的,LPCWSTR类型是const wchar_t *,而const char[]是const char *,因此不能隐式转换。在VS2010开发平台中,默认情况下使用Unicode字符集,而在VC6.0中默认使用...

    wchar_t,char,string,wstring之间的相互转换

    在处理中文时有时需要进行wchar_t,char,string,wstring之间的转换。 其中char和string之间、wchar_t和wstring之间的转换较为简单,代码在vs2010下测试通过。 代码如下:#include &lt;iostream&gt;#include &lt;string&gt;#...

    TCHAR转CHAR与WCHAR类型导出函数自动生成器

    当在 windows 下开发程序库时,使用 TCHAR 类型,比直接使用 char 和 wchar_t 具有更好的移植性。但是在编写动态链接库时,不能直接导出 TCHAR 类型的函数,给 TCHAR 类型函数的使用带来了一些限制。使用 texport 在...

    VC之CString,wchar_t,int,string,char*之间的转换

    `CString`、`wchar_t`、`int`、`string`和`char*`都是编程中常用的字符串和数值类型,它们之间互相转换有助于在不同场景下灵活地处理数据。本篇文章将详细介绍这些类型之间的转换方法。 首先,`CString`是Microsoft...

    string和char*

    CString 主要应用于 MFC 和 ATL 编程中,支持多种字符类型,如 char、wchar_t 和 TCHAR。 CString 的构造函数可以接受基本的字符串变量,如 char* 等。CString 提供了许多实用的成员函数,如 operator+=、operator+...

    cpp-texport用于自动生成TCHAR类型程序的char和wchart类型的函数调用存根

    TCHAR是一个宏定义,它可以根据编译器的预定义宏自动选择为`char`或`wchar_t`,以适应宽字符(Unicode)和窄字符(ASCII)的环境。`cpp-texport`是一个工具,它帮助开发者自动生成与TCHAR相关的函数调用存根,使得在...

    关于char的前后兼容问题

    `char` 和 `wchar_t` 在计算机编程中,字符类型是处理文本数据的基础。对于不同的字符集和编码标准,编程语言提供了多种字符类型来满足需求。 - **`char`**: 这是一种基本的数据类型,在 C/C++ 中用于存储单字节...

Global site tag (gtag.js) - Google Analytics