多字节与宽字节之间的转换(网络编程会用到)

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

 

[cpp] view plaincopy

  1. CFile nFile_Read;    //读取数据  

  2. if(!nFile_Read.Open(L"e:\\1.xml",CFile::modeRead|CFile::typeBinary))  

  3. {  

  4.     MessageBox(L"未能打开");  

  5. }  

  6.   

  7.   

  8.   

  9. UINT nLen=(UINT)nFile_Read.GetLength();  

  10. // 宽字符类型  modifiey by yujian 3-7--------------------------------  

  11. wchar_t* pWCHAR= new wchar_t[nLen/2+1];      //   分配空间  

  12. memset(pWCHAR,0,sizeof(wchar_t)*(nLen/2+1));  //   清空  

  13.   

  14. nFile_Read.Read(pWCHAR, (UINT)nLen);         //    读取数据  

  15. nFile_Read.Close();  

 

  1   宽字节转换为多字节

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

    然后进行转换

 

[cpp] view plaincopy

  1. //计算需要多少个字节才能表示对应的多字节字符串  

  2. DWORD num=WideCharToMultiByte(CP_ACP,0,pWCHAR,-1,NULL,0,NULL,0);  

  3.   

  4. //开辟空间  

  5. char *pChar=NULL;  

  6. pChar=(char*)malloc(num*sizeof(char));  

  7. if (pChar==NULL)  

  8. {  

  9.     free(pChar);  

  10. }  

  11. memset(pChar,0,num*sizeof(char));  

  12.   

  13. //将宽字节字符串转换为多字节字符串  

  14. WideCharToMultiByte(CP_ACP,0,pWCHAR,-1,pChar,num,NULL,0);  


 

2  多字节转换为宽字节

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

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

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

 

[cpp] view plaincopy

  1. wchar_t* pWCHAR=NULL;  

  2.   

  3. //计算pChar所指向的多字节字符串相当于多少个宽字节  

  4. DWORD num=MultiByteToWideChar(CP_ACP,0,pChar,-1,NULL,0);  

  5.   

  6. pWCHAR=(wchar_t*)malloc(num*sizeof(wchar_t));  

  7.   

  8. if (pWCHAR==NULL)  

  9. {  

  10.     free(pWCHAR);  

  11. }  

  12.   

  13. memset(pWCHAR,0,num*sizeof(wchar_t));  

  14.   

  15. //多字节转换为宽字节  

  16. MultiByteToWideChar(CP_ACP,0,pChar,-1,pWCHAR,num);  


 

 

   参考资料:

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

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


你可能感兴趣的:(字符串,网络编程,空间)