读取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