MFC编码转换

 

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);

}

 

posted @ 2013-08-04 15:32  宝贝,我永远都在  阅读(394)  评论(0)    收藏  举报