windows下wchar_t* 转char*
这个在windows下很常见,常用,留个档。
一般用这个函数:
size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count );
mbstr
The address of a sequence of multibyte characters.
wcstr
The address of a sequence of wide characters.
count
The maximum number of bytes that can be stored in the multibyte output string.
locale
The locale to use.
下面是我写的一个测试,是根据项目改过来的:
1 #include <windows.h> 2 #include <string.h> 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <boost/filesystem.hpp> 6 7 namespace bfs = boost::filesystem; 8 9 10 bool get_path(char *file_name,size_t size){ 11 12 13 char ownPth[MAX_PATH]; 14 15 HMODULE hModule = GetModuleHandle(NULL); // Will contain exe path,When passing NULL to GetModuleHandle, it returns handle of exe itself 16 if (hModule != NULL) 17 { 18 GetModuleFileNameA(hModule,ownPth, MAX_PATH); // 19 } 20 else 21 ownPth[0]=0; 22 23 bfs::path iic_file(ownPth); 24 iic_file = iic_file.parent_path() / "dlp_usb.iic" ; //For releaseing 25 26 if( !bfs::is_regular_file(iic_file)) 27 { 28 printf("\r\nError,open 68013 iic file fail\r\n"); 29 return false ; 30 } 31 32 33 wcstombs(file_name,iic_file.c_str(),size); 34 35 //memcpy(file_name,iic_file.c_str(),byte_count); 36 37 return true; 38 39 } 40 41 int main(){ 42 43 char iic_file[512]; 44 45 if(get_path( iic_file,512)){ 46 47 printf("TRUE\n"); 48 } 49 50 return 0; 51 }
references:
http://msdn.microsoft.com/en-us/library/5d7tc9zw.aspx
http://blog.163.com/tianshi_17th/blog/static/4856418920085209414977/