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