void C编码转换Dlg::OnBnClickedButton1()
{
char *buff="不abc111";
int len = sizeof(buff);//计算的是指针的长度,长度是4.算的是char指针类型
int len1 = strlen(buff);//不算\0,中文算2个字节
CString l;
l.Format(_T("长度是%d"),len);
AfxMessageBox(l);
}
void C编码转换Dlg::OnBnClickedButton2()
{
char buff[]="你abc111";
int len = sizeof(buff);//计算的是指针的长度,长度是9,sizeof表示计算buff[]这个类型占了多少个字节,包括\0,中文占2个字节
CString l;
l.Format(_T("长度是%d"),len);
AfxMessageBox(l);
}
void C编码转换Dlg::OnBnClickedButton3()
{
char* buff="我是ansi嗎";
int blen = MultiByteToWideChar(CP_ACP,0,buff,-1,NULL,NULL);//转码的形式,一般为0,buff需要转换的.-1表示系统给我们计算大小
//返回ansi对应的unicode码的大小,他会把\0也计算进去的
wchar_t* buff1=new wchar_t(blen+1);
MultiByteToWideChar(CP_ACP,0,buff,-1,buff1,blen);
}
void C编码转换Dlg::OnBnClickedButton4()
{
wchar_t* buff=_T("我是ansi嗎");
int blen = WideCharToMultiByte(CP_ACP,0,buff,-1,NULL,NULL,NULL,NULL);//返回unicode对应的ansi码的大小,他会把\0也计算进去的
char* buff1=new char(blen+1);
WideCharToMultiByte(CP_ACP,0,buff,-1,buff1,blen,NULL,NULL);
}
void C编码转换Dlg::OnBnClickedButton5()
{
wchar_t* buff=_T("我是ansi嗎");
int blen = WideCharToMultiByte(CP_UTF8,0,buff,-1,NULL,NULL,NULL,NULL);//返回unicode对应的ansi码的大小,他会把\0也计算进去的
char* buff1=new char(blen+1);
WideCharToMultiByte(CP_UTF8,0,buff,-1,buff1,blen,NULL,NULL);
//下面是utf-8到unicode编码
blen = MultiByteToWideChar(CP_UTF8,0,buff1,-1,NULL,NULL);//返回UTF8对应的unicode码的大小,他会把\0也计算进去的
wchar_t* buff2=new wchar_t(blen+1);
MultiByteToWideChar(CP_UTF8,0,buff1,-1,buff2,blen);
}
void C编码转换Dlg::OnBnClickedButton6()//都是利用unicode编码的中专进行类型转换,下面是ansi到utf-8
{
//1.先把ansi(GBK,GBK...)转到uniocde
char* buff="我是ansi嗎";
int blen = MultiByteToWideChar(CP_ACP,0,buff,-1,NULL,NULL);//返回ansi对应的unicode码的大小,他会把\0也计算进去的
wchar_t* buff1=new wchar_t(blen+1);
MultiByteToWideChar(CP_ACP,0,buff,-1,buff1,blen);
//2.在把unicode编码转到utf-8码
blen = WideCharToMultiByte(CP_UTF8,0,buff1,-1,NULL,NULL,NULL,NULL);//返回unicode对应的ansi码的大小,他会把\0也计算进去的
char* buff2=new char(blen+1);
WideCharToMultiByte(CP_UTF8,0,buff1,-1,buff2,blen,NULL,NULL);
//在把utf-8还原到ansi编码
//1.先把utf-8转到unicode
blen = MultiByteToWideChar(CP_UTF8,0,buff2,-1,NULL,NULL);//返回UTF8对应的unicode码的大小,他会把\0也计算进去的
wchar_t* buff3=new wchar_t(blen+1);
MultiByteToWideChar(CP_UTF8,0,buff2,-1,buff3,blen);
//2.在把unicode编码转到ansi编码
blen = WideCharToMultiByte(CP_ACP,0,buff3,-1,NULL,NULL,NULL,NULL);//返回unicode对应的ansi码的大小,他会把\0也计算进去的
char* buff4=new char(blen+1);
WideCharToMultiByte(CP_ACP,0,buff3,-1,buff4,blen,NULL,NULL);
}