多字节与宽字节字符串的相互转换

来源:互联网 发布:淘宝客都是怎么推广的 编辑:程序博客网 时间:2024/05/29 13:16

 

  读取UNICODE文件 保存在宽字节字符串中, 而DLL中的参数为char* , 所以必须进行宽字节到多字节的转换

 

CFile nFile_Read; //读取数据if(!nFile_Read.Open(L"e:\\1.xml",CFile::modeRead|CFile::typeBinary)){MessageBox(L"未能打开");}UINT nLen=(UINT)nFile_Read.GetLength();// 宽字符类型  modifiey by yujian 3-7--------------------------------wchar_t* pWCHAR= new wchar_t[nLen/2+1];      //   分配空间memset(pWCHAR,0,sizeof(wchar_t)*(nLen/2+1));  //   清空nFile_Read.Read(pWCHAR, (UINT)nLen);         //    读取数据nFile_Read.Close();

 

  1   宽字节转换为多字节

    首先计算宽字节字符串相当于多少个字节的字符串

    然后进行转换

 

//计算需要多少个字节才能表示对应的多字节字符串DWORD num=WideCharToMultiByte(CP_ACP,0,pWCHAR,-1,NULL,0,NULL,0);//开辟空间char *pChar=NULL;pChar=(char*)malloc(num*sizeof(char));if (pChar==NULL){free(pChar);}memset(pChar,0,num*sizeof(char));//将宽字节字符串转换为多字节字符串WideCharToMultiByte(CP_ACP,0,pWCHAR,-1,pChar,num,NULL,0);


 

2  多字节转换为宽字节

    传递给DLL后,DLL中使用的是宽字节  因此在DLL中还要将单字节转换为宽字节

    首先,计算多字节字符串相当于多少个宽字节

    然后,将多字节字符串转换为宽字节字符串

 

wchar_t* pWCHAR=NULL;//计算pChar所指向的多字节字符串相当于多少个宽字节DWORD num=MultiByteToWideChar(CP_ACP,0,pChar,-1,NULL,0);pWCHAR=(wchar_t*)malloc(num*sizeof(wchar_t));if (pWCHAR==NULL){free(pWCHAR);}memset(pWCHAR,0,num*sizeof(wchar_t));//多字节转换为宽字节MultiByteToWideChar(CP_ACP,0,pChar,-1,pWCHAR,num);


 

 

   参考资料:

http://blog.csdn.net/shuilan0066/article/details/4734359

http://blog.csdn.net/shuilan0066/article/details/5705673