CString 转 char *

来源:互联网 发布:centos 7.3 gitlab 编辑:程序博客网 时间:2024/06/08 11:37
vs默认unicode,如需要修改:属性->常规->字符集

以下是关于WideCharToMultiByte改变字宽的俩例子


如果你不是unicode环境,
char* 不是用CString填进去的,应该是这样
CString szParA;
CString szParB;
假设接口是:
fun(char* ParA, char* parB);
那么应该写作:
fun(szParA.GetBuffer(0), szParB.GetBuffer(0);
 
如果是unciode的编译环境
CString szParA;
CString szParB;
 
假设接口是:
fun(char* ParA, char* parB);
 
那么需要先转换为多字节字符串,然后才可以作为参数填写进去:
如果是wchar_t转换为char接口的可以用这个函数:
BOOL MyWideChar_tToMultiByte(LPTSTR lpcwszStr, LPSTR lpOut,INT nOutSize)
{
    DWORD dwMinSize = 0;
    dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
 
    if(dwMinSize > nOutSize)
    {
        return FALSE;
    }
    else
    {
        WideCharToMultiByte(CP_OEMCP,NULL,lpInt,-1,lpOut,nOutSize,NULL,FALSE);
        return TRUE;
    }
}
 
所以两个参数需要这么转化:
char bufA[512];//多申请点,免得溢出
char bufB[512];
 
MyWideChar_tToMultiByte(szParA.GetBuffer(0), bufA, sizeof(bufA));
MyWideChar_tToMultiByte(szParB.GetBuffer(0), bufB, sizeof(bufB));
 
经过转换后,就可以作为char*类的替代品bufA、bufB作为参数填写进去了,如下:
fun(bufA, bufB);
原创粉丝点击