MFC:在Unicode编码下CString、char *转换

一、CString转char *

CString pb=_T("abc");
int len = WideCharToMultiByte(CP_UTF8, 0, pb, pb.GetLength(), NULL, 0, NULL, NULL);
    char* pa = new char[len + 1];
    len = WideCharToMultiByte(CP_UTF8, 0, pb, pb.GetLength(), pa, len + 1, NULL, NULL);
    pa[len] = 0;
//pa就是最后转换成的char *

二、char * 转CString

CString st=_T("123");
 int nLength = st.GetLength();
 int nBytes = WideCharToMultiByte(CP_ACP,0,st,nLength,NULL,0,NULL,NULL);
 char* path1 = new char[ nBytes + 1];
 memset(path1,0,nLength + 1);
 WideCharToMultiByte(CP_OEMCP, 0, st, nLength, path1, nBytes, NULL, NULL);
 path1[nBytes] = 0; 

原文地址:https://www.cnblogs.com/tianxiafeiyu/p/9119615.html

时间: 2024-09-27 16:17:59

MFC:在Unicode编码下CString、char *转换的相关文章

Unicode字符集下CString与char *转换 (解决中文乱码等)(转)

UniCode 下 CString 转 char* 的方法的文章有很多,但是大部分都是在互相转载,看了那么多资料,仍然没有解决乱码的问题,后来从一个论坛的一条回复里面找到了正确的方法,特此拿出来与大家分享. 先总结一下网上找到的三种转换的方法: 方法一:使用函数setlocale setlocale(LC_ALL,"chs"); 需要包含头文件#include<locale.h> 此方法的思路是配置地域化信息.通常在需要输入输出中文的时候设置一下,就没问题了,setloca

MFC Unicode编码下,获取CString描述的IP地址并赋值到CIPAddressCtrl控件中

1. UniCode编码下,CString中字符被声明为宽字,应使用如下方法获取char* CString cstrIp = strIp; // Unicode 下将 CString转为char* int n = cstrIp.GetLength(); int len = WideCharToMultiByte(CP_ACP,0,cstrIp,cstrIp.GetLength(),NULL,0,NULL,NULL); char *p = new char[len+1]; WideCharToMu

Unicode字符集下CString与char *相互转换

经常遇到CString转换char*时只返回第一个字符.原因是因为在Unicode字符集下CString会以Unicode的形式来保存数据,强制类型转换只会返回第一个字符.所以直接转换在基于MBCS的工程可以,但在基于Unicode字符集的工程中直接转换是不可行的.下面就具体看一下,在Unicode字符集下如下进行CString与char*的互相转换. 在Visual C++.NET2005中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:M

CString char[]转换

CString str;str = _T("hello world!")USES_CONVERSION; //定义后才能使用T2Achar buff[1024]; sprintf_s(buff,1024,"%s\r\n",T2A(str)); 这样一种方式可能会使编码方式改变 在转换回来的时候要注意 WCHAR wch[1000]; int n = MultiByteToWideChar( //转换Unicode到Ansi 936, 0, buff, -1, wch

UNICODE编码下setclipbdata

搞了好久,要么setclipboarddata中断,要么只能复制第一个字母. 只能复制首字母是因为UNICODE下CString强制转换wchar_t*不行. setclipboarddata中断是因为wcscpy_s拷贝字符串到内存地址的rsize_t不对. 如下是OK的代码: if (OpenClipboard()){ CString temp; GetDlgItemText(IDC_EDIT1, temp); EmptyClipboard(); HGLOBAL hmem=NULL; hme

Unicode编码下字符串转换

VC\MFC当中CString.string.char.char*.char数组.int等类型之间的转换令人晕头转向,特地搜集多篇文章资料,利用代码实例等清晰的理清他们之间的关系和如何转换,其实非常简单. 1.CString std::string互转 std::string strstring = "std::string"; CString strCString = _T("CString"); //CString->std::string strstri

unicode编码与中文互相转换

如你的原始文件是1.properties(这个文件是中文编码),你想转换成unicode的 则在cmd下进入到你这个文件所在的目录键入: native2ascii -encoding gb2312 1.properties 2.properties, 执行命令后你会在当前目录下看到一个2.properties的文件,内容就是1.properties的unicode编码内容. 如果你再想转换回来,同样在cmd下进入文件所在的目录键入: native2ascii -reverse -encoding

Unicode编码与中文的转换

1.1.  将unicode编码转换为中文 public String decodeUnicode(String src) { char[] in = src.toCharArray(); char aChar; char[] out = new char[src.length()]; int outLen = 0; int off = 0; int end = src.length(); while (off < end) { aChar = in[off++]; if (aChar == '

ASCII,Utf8,Unicode编码下的中英文字符大小

一,测试Demo namespace 不同编码下的中英文字符大小 { class Program { static void Main(string[] args) { ShowCode(); } private static void ShowCode() { string[] strArray = { "b","abc","乙","甲乙丙丁"}; byte[] buffer; string mode, back; fore