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/

时间: 2024-08-02 16:06:38

windows下wchar_t* 转char*的相关文章

wchar_t内置还是别名(wchar_t在windows下是16整数的别名,在linux等平台下是32位整数的别名。MSVC2008开始默认是/Zc:wchar_t)

接前一篇C++ ABI之名字改编(以Qt为例),继续看看C++名字改编相关的问题. 问题 MSVC 有一对选项/Zc:wchar_t- 与 /Zc:wchar_t控制wchar_t 于是 wchar_t 可以是 unsigned short 或 __wchar_t(称为原生类型?) 的别名 两个东西混用会怎么样? 首先考虑,会混用么?,是杞人忧天么? 由于 Qt 为 MSVC 提供的二进制包采用的前者/Zc:wchar_t-.考虑: 如果你编译自己的Qt程序时,启用了后者,会怎么样? 如果Qt程

CString向char类型转化 ---“=”: 无法从“wchar_t *”转换为“char *

此文从网上复制过来,原文出处已丢失,望见谅哈       VC 2005中,这个本来很简单的问题又稍微复杂了一点.    在工程里面,一个必不可少的步骤就是把CString转换为shar*字符串.通过google,我发现可以使用以下方法:    使用CString的GetBuffer方法         CString s("Hello,World");        char* c = s.GetBuffer(0);     但是我在VC++2005中编译得到下列信息        

Qt下QString转char*

Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型 在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档. 因为char*最后都有一个'/0'作为结束符,而采用QString::toLatin1()时会在字符串后面加上'/0' 方法如下: Qs

char 转wchar_t 及wchar_t转char

利用WideCharToMultiByte函数来转换,该函数映射一个unicode字符串到一个多字节字符串.通常适合于window平台上使用. #include <tchar.h> #include <windows.h> int _tmain(int argc, _tchar* argv[]) { wchar_t pwstr[] =l"我是中国人"; wchar_t pwstr2[20]; char *pcstr = (char *)malloc(sizeof

二、Windows 下 ShellCode 编写初步

第二章.Windows 下 ShellCode 编写初步 (一)shellcode 定义:最先的 Shell 指的是人机交互界面,ShellCode 是一组能完成我们想要的功能的机器代码,通常以十六进制数组的形式存在 NOTES:计算机每次都只是执行当前 EIP 指向的指令(单 CPU).在当前指令执行后,EIP 会自动加 1,从而指向下一条指令.如果有 JMP CALL RET 一类的指令,EIP 就会被强行改变成指定的地址,从而完成流程的跳转 (二)打开控制台窗口的 C 程序 升级版: 程序

windows下调用外部exe程序 SHELLEXECUTEINFO

本文主要介绍两种在windows下调用外部exe程序的方法: 1.使用SHELLEXECUTEINFO 和 ShellExecuteEx SHELLEXECUTEINFO 结构体的定义如下: 1 typedef struct _SHELLEXECUTEINFO { 2 DWORD cbSize; 3 ULONG fMask; 4 HWND hwnd; 5 LPCTSTR lpVerb; 6 LPCTSTR lpFile; 7 LPCTSTR lpParameters; 8 LPCTSTR lpD

在windows下的QT编程中的_TCHAR与QString之间的转换

由于在windows下的QT编程中,如果涉及到使用微软的API,那么不可避免使用_TCHAR这些类型,因此在网上查了一下,其中一个老外的论坛有人给出了这个转换,因此在这里做一下笔记 : )#ifdef UNICODE #define QStringToTCHAR(x)     (wchar_t*) x.utf16() #define PQStringToTCHAR(x)    (wchar_t*) x->utf16() #define TCHARToQString(x)     QString:

一个简单的Windows下的socket程序

服务器端代码server.cpp: 1 #include <stdio.h> 2 #include <WinSock2.h> 3 #pragma comment(lib,"ws2_32.lib") //加载ws2_32.dll 4 5 int main() 6 { 7 //初始化DLL 8 /************************************************************************/ 9 /*调用WSASta

Windows下编码转换相关

一.ANSI转换为UTF-16 #include <windows.h> wchar_t* AnsiToUnicodeBegin(const char* str){ char* sz = new char[strlen(str)+1]; strcpy(sz, str); int wLen = MultiByteToWideChar(CP_ACP, 0, sz, -1, NULL, 0); wchar_t* wBuf = new wchar_t[wLen+1]; MultiByteToWideC