精华内容
下载资源
问答
  • void CStringToCharArray(char *OutStr, CString ... //VS2008中Unicode编码下CString转char*的方法  DWORD dwNum=WideCharToMultiByte(CP_OEMCP,NULL,InCstr,-1,NULL,0,NULL,FALSE)+1;  WideCharToMultiByte(CP

    void CStringToCharArray(char *OutStr, CString InCstr )
    {
     //VS2008中Unicode编码下CString转char*的方法
     DWORD dwNum=WideCharToMultiByte(CP_OEMCP,NULL,InCstr,-1,NULL,0,NULL,FALSE)+1;
     WideCharToMultiByte(CP_OEMCP,NULL,InCstr,InCstr.GetLength(),OutStr,dwNum,NULL,FALSE);

     //LPCTSTR p = InCstr;
     //OutStr = &p;

    }

     

    展开全文
  • 在Visual C++.NET2005中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte Character Set...这里总结了在Visual C++.NET2005环境中Unicode字符集下CStringchar *之

    在Visual C++.NET2005中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte Character Set),这样导致在VC6.0中非常简单实用的各类字符操作和函数在VS2005环境下运行时会报各种各样的错误,这里总结了在Visual C++.NET2005环境中Unicode字符集下CString和char *之间相互转换的几种方法,其实也就是Unicode字符集与MBCS字符集转换。


    1、Unicode下CString转换为char *


    方法一:使用API:WideCharToMultiByte进行转换

    CString str = _T("D:\\校内项目");

    //注意:以下n和len的值大小不同,n是按字符计算的,len是按字节计算的
    int n = str.GetLength(); // n = 14, len = 18

    //获取宽字节字符的大小,大小是按字节计算的
    int len = WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),NULL,0,NULL,NULL);

    //为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小
    char * pFileName = new char[len+1]; //以字节为单位

    //宽字节编码转换成多字节编码
    WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),pFileName,len,NULL,NULL);

    pFileName[len+1] = '\0'; //多字节字符以'\0'结束


    方法二:使用函数:T2A、W2A

    CString str = _T("D:\\校内项目");

    //声明标识符
    USES_CONVERSION;

    //调用函数,T2A和W2A均支持ATL和MFC中的字符转换
    char * pFileName = T2A(str); 
    //char * pFileName = W2A(str); //也可实现转换

    注意:有时候可能还需要添加引用#include <afxpriv.h>


    方法三:

    使用强制转换。例如:
           CString theString( (_T("Char test "));
            LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;


    方法四:

    使用strcpy。例如:
           CString theString( (_T("Char test "));
           LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
            _tcscpy(lpsz, theString);

    需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。


    方法五:

    如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。 如果你只是打算修改字符或者截短字符串,例如:
           CString s(_T("Char test "));
            LPTSTR p = s.GetBuffer();

           LPTSTR dot = strchr(p, ''.'');

             // 在这里添加使用p的代码

             if(p != NULL)

            *p = _T('');
             s.ReleaseBuffer();                     // 使用完后及时释放,以便能使用其它的CString成员函数

            在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。


    2、Unicode下char *转换为CString


    方法一:使用API:MultiByteToWideChar进行转换

    char * pFileName = "D:\\校内项目";

    //计算char *数组大小,以字节为单位,一个汉字占两个字节
    int charLen = strlen(pFileName);

    //计算多字节字符的大小,按字符计算。
    int len = MultiByteToWideChar(CP_ACP,0,pFileName,charLen,NULL,0);

    //为宽字节字符数组申请空间,数组大小为按字节计算的多字节字符大小
    TCHAR *buf = new TCHAR[len + 1];

    //多字节编码转换成宽字节编码
    MultiByteToWideChar(CP_ACP,0,pFileName,charLen,buf,len);

    buf[len] = '\0'; //添加字符串结尾,注意不是len+1

    //将TCHAR数组转换为CString
    CString pWideChar;
    pWideChar.Append(buf);

    //删除缓冲区
    delete []buf;


    方法二:使用函数:A2T、A2W

    char * pFileName = "D:\\校内项目";

    USES_CONVERSION;
    CString s = A2T(pFileName);

    //CString s = A2W(pFileName);


    方法三:使用_T宏,将字符串转换为宽字符

    //多字节字符集,在vc6和vc7种可以编译通过的语句,但VS2005不能通过,默认为Unicode字符集
    //AfxMessageBox("加载数据失败",0);

    //书写代码使用TEXT("")或_T(""),文本在UNICODE和非UNICODE程序里都通用
    AfxMessageBox(_T("加载数据失败"),0);


    方法四:

    若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:

             char chArray[] = "Char test";
            TCHAR * p = _T("Char test");( 或LPTSTR p = _T("Char test");)
             CString theString = chArray;
             theString.Format(_T("%s"), chArray);
             theString = p;



    注意:直接转换在基于MBCS的工程可以,但在基于Unicode字符集的工程中直接转换是不可行的,CString会以Unicode的形式来保存数据,强制类型转换只会返回第一个字符。

    使用以前转换CString的方法或者网上别人的指导用法,都失效了
    1.strcpy_s( pchar, sizeof(pchar), mCString.GetBuffer(mCString.GetLength()) );不行,mCString.GetBuffer()返回的是wchar_t数组,使用Unicode字符集时,wchar_t无法自动转换为char*.

    2.strcpy_s(pchar, sizeof(pchar), (LPCSTR)_bstr_t(mCString));不行,"_bstr_t找不到识别符"

    3.char *pch = (LPSTR)(LPCTSTR)mCString; 这样没有报错,但pch只能获得CString的第一个字符而已,第一个换成(char*),也只能获取第一个字符。郁闷。

    4.CString.GetBuffer(CString.GetLength())不行。w_char*不能转为_char*。

    展开全文
  • Cstring转换成char*函数

    千次阅读 2020-07-01 19:14:00
    char * CStringtochar(CString str) { char *ptr; #ifdef _UNICODE LONG len; len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL); ptr = new char [len+1]; memset(ptr,0,len + 1); ...
    char * CStringtochar(CString str)
    {    
    	char *ptr;    
    #ifdef _UNICODE    
    	LONG len;    
    	len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);    
    	ptr = new char [len+1];    memset(ptr,0,len + 1);    
    	WideCharToMultiByte(CP_ACP, 0, str, -1, ptr, len + 1, NULL, NULL);    
    #else    
    	ptr = new char [str.GetAllocLength()+1];    
    	sprintf(ptr,_T("%s"),str);    
    #endif    
    	return ptr;
    }
    
    
    展开全文
  • CString转char*,复制

    千次阅读 2016-09-11 21:31:06
    1.对于多字节,CString转char*如下: CString cs = "abcdef; char c_arr[30]; strcpy(c_arr,(LPCTSTR)cs); 2.对于Unicode字符集,需要多做一步,将Unicode转多字节字符,使用函数: int WideCharToM

    首先要先确定项目的字符集是多字节字符集还是Unicode字符集

    字符集设置如下:


    1.对于多字节,CString转char*如下:

    CString cs = "abcdef;

    char c_arr[30];

    strcpy(c_arr,(LPCTSTR)cs);

    2.对于Unicode字符集,需要多做一步,将Unicode转多字节字符,使用函数:

    int WideCharToMultiByte(

    UINT CodePage, // code page,一般设为CP_ACP

    DWORD dwFlags, // performance and mapping flags,一般设为0

    LPCWSTR lpWideCharStr, // wide-character string,指定一个宽字符串

    int cchWideChar, // number of chars in string,宽字符串的长度(字符数)

    LPSTR lpMultiByteStr, // buffer for new string,存放转换后的多字节字符串缓存区

    int cbMultByte, // size of buffer,多字符串缓存区的最大长度(字节数)

    LPBOOL lpUsedDefaultChar// set when default char used,如果有字符转换失败,则为TRUE,一般设为NULL

    );

    CString cs = "abcdef;

    char c_arr[30] = {'0'};

    WideCharToMultiByte(CP_ACP, 0, cs, cs.GetLength, c_arr, 30, TRUE);


    WideCharToMultiByte()
    展开全文
  • MFC Cstring转char *

    2015-09-23 17:14:57
    UniCode 下 CString char* 的方法的文章有很多,但是大部分都是在互相转载,看了那么多资料,仍然没有解决乱码的问题,后来从一个论坛的一条回复里面找到了正确的方法,特此拿出来与大家 分享。   先总结一下...
  • 在工程的字符集采用unicode情况下,CString转char*没有发现太多的方法,可以用WidecharToMultiByte函数来实现: CString str1 =_T("123"); int len =WideCharToMultiByte(CP_ACP,0,str1,-1,NULL,0,NULL,NULL); ...
  • 在Visual C++.NET2005中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte Character ...这里总结了在Visual C++.NET2005环境中Unicode字符集下CStringchar ...
  • CString转char*

    千次阅读 2018-12-21 09:22:37
    函数: BOOL G_StringToASII(CString const &amp;strSrc, BYTE * &amp;pRefStoreBuff, int &amp;nBuffLen, int &amp;nLenResult) { nLenResult = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, ...
  • CString转char*实现方法

    2018-04-29 12:24:00
    char* p = T2A(str.GetBuffer(0)); str.ReleaseBuffer(); 找了好久,终于用这个方法做到了,这个是微软现成的转换函数。在做mfc与php socket中文字符传输时用到的这个。 转载于:...
  • MFC中CStringchar*

    2020-09-18 18:08:07
    最近在做MFC的项目,遇到CString和char*互转的问题,项目中的字符集使用的是Unicode 字符...CString转char*:使用WideCharToMultiByte()函数,该函数可以映射一个unicode字符串到一个多字节字符串。WideCharToMultiByt
  • 但在MFC学习初期,容易把CString与const char*char*混淆。遇到三种类型数据转换时,总是得过且过。下面就剖析一下三者之间的转换关系与方法。   1、CString与const char*(LPCTSTR---是在Unicode环境下const ...
  • cstring to char*,const char*

    2013-09-11 22:21:44
    cstring to char*,const char*   在C语言中表示字符串,没有string概念,只可以用char*和char[];... 从char*CString的转换很简单,只需要用CString的构造函数即可。  本文介绍了CString到const char*和c
  • CStringchar*之间的转换

    千次阅读 2018-08-07 20:49:06
    //1、CString char* //看了很多方法总是又莫名其妙的问题,偶然发现这样一个很好的函数,故记录 extern char* CStringToChar(CString str) { const size_t strsize = (str.GetLength() + 1)*2; char* pstr = ...
  • 也谈C++中char*与wchar_t*之间的转换 关于C++中的char*与wchar_t*这两种类型的相互转换,网上说的大多很繁琐,可行性也不高。下面这个方法是在MSDN里面找到的,个人认为还比较不错: 把char*转换为wchar_t* 用...
  • 这是我自己找的一个函数整理了下,做MFC开发时在unicode字符下使用,希望帮到大家,谢谢
  • string是方便的,可以从几乎所有的...char*没有构造函数,仅可以赋值;举例:char* psz = “joise”;CString cstr( psz );string str( cstr );string是最方便的,几乎可以直接用所有的字符串赋值,包括CString和ch...
  • CString转char*字符串

    千次阅读 2013-03-31 08:46:36
    从编辑框获得字符串是CString,而socket函数需要的是char字符串。发现转换有点麻烦,CString本身没提供这个功能啊。 纠结后总结的解决方案如下: 非UNICODE工程: 1.获得CString存储字符串的内存地址,在强制...
  • 使用unicode的会存在宽字节...CString转char * 1、使用WideCharToMultiByte函数,其中mWcount为CString类型。char* _wParam = (char*) malloc( sizeof(char) * 10); // = (LPSTR)(LPCTSTR)m_CalibrationData.mWcount;
  • 原来CString类对象GetBuffer(),后以后还是unicode编码,所以必须将宽字符转换成char类型那就必须用到一个函数   网上查了下解决方法如下:   在Visual C++.NET2005中,默认的字符集形式
  • 但在MFC学习初期,容易把CString与const char*char*混淆。遇到三种类型数据转换时,总是得过且过。下面就剖析一下三者之间的转换关系与方法。 1、CString与const char*(LPCTSTR---是在Unicode环境下const char*...
  • CString char* 的方法的文章有很多,但是大部分都是在互相转载,看了那么多资料,仍然没有解决乱码的问题,后来从一个论坛的一条回复里面找到了正确的方法,特此拿出来与大家分享。 先总结一下网上找到的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 591
精华内容 236
关键字:

cstring转char*函数