multibytetowidechar(跪求MultiByteToWideChar函数的用法)
本文目录
跪求MultiByteToWideChar函数的用法
//========================================================================//TITLE:// MultiByteToWideChar和WideCharToMultiByte用法详解//AUTHOR:// norains//DATE:// 第一版:Monday 25-December -2006// 增补版:Wednesday 27-December -2006// 修订版:Wednesday 14-March-2007 (修正之前的错误例子)//Environment:// EVC4.0 + Standard SDK//======================================================================== 1.使用方法详解 在本文开始之处,先简要地说一下何为短字符和宽字符. 所谓的短字符,就是用8bit来表示的字符,典型的应用是ASCII码.而宽字符,顾名思义,就是用16bit表示的字符,典型的有UNICODE.关于 windows下的ASCII和UNICODE的更多信息,可以参考这两本经典著作:《windows 程序设计》,《windows 核心编程》.这两本书关于这两种字符都有比较详细的解说. 宽字符转换为多个短字符是一个难点,不过我们只要掌握到其中的要领,便可如鱼得水. 好吧,那就让我们开始吧. 这个是我们需要转化的多字节字符串: char sText = {“多字节字符串!OK!“}; 我们需要知道转化后的宽字符需要多少个数组空间.虽然在这个里程里面,我们可以直接定义一个20*2宽字符的数组,并且事实上将运行得非常轻松愉快.但假如多字节字符串更多,达到上千个乃至上万个,我们将会发现其中浪费的内存将会越来越多.所以以多字节字符的个数的两倍作为宽字符数组下标的声明绝对不是一个好主意. 所幸,我们能够确知所需要的数组空间. 我们只需要将MultiByteToWideChar()的第四个形参设为-1,即可返回所需的短字符数组空间的个数: DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, sText, -1, NULL, 0); 接下来,我们只需要分配响应的数组空间: wchar_t *pwText; pwText = new wchar_t Size of the buffer // //Return Values: // TRUE: Succeed // FALSE: Failed // //Example: // MByteToWChar(szW,szA,sizeof(szA)/sizeof(szA)); //--------------------------------------------------------------------------------------- BOOL WCharToMByte(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize) { DWORD dwMinSize; dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE); if(dwSize 《 dwMinSize) { return FALSE; } WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,lpszStr,dwSize,NULL,FALSE); return TRUE; }使用方法也很简单,示例如下: wchar_t wText = {L“函数示例“}; char sText= {0}; WCharToMByte(wText,sText,sizeof(sText)/sizeof(sText)); MByteToWChar(sText,wText,sizeof(wText)/sizeof(wText)); 这两个函数的缺点在于无法动态分配内存,在转换很长的字符串时可能会浪费较多内存空间;优点是,在不考虑浪费空间的情况下转换较短字符串非常方便.
MultiByteToWideChar()函数
pWideStr = malloc( iLength ) ; //分配6字节内存会导致溢出,而且 C++ 建议使用 new 和 delete 代替 malloc 和 free:pWideStr = new WCHAR = 0; // 追加 \0...delete pWideStr;
更多文章:

eclipse jee安装教程(如何在Mac系统安装eclipse并运行java程序)
2025年3月6日 17:00

gradient matlab(matlab 求导与gradient结果相差10倍)
2025年3月9日 11:40

wallhaven壁纸(分享wallhaven官网的壁纸违法吗)
2025年3月22日 23:20

请问一下ubunt,fedora,和redhat各自的优点及其适用人群,谢谢?如何在ubuntu上安装输入法
2025年4月10日 10:50

hands in pockets(put one`s hand in one`s pocket 造句)
2025年2月9日 13:50

delivery service(请问一下“Delivery Service Renvenue”的中文解释怎么说,谢谢啦)
2025年2月22日 09:00

刚入职不会svn(如何在MAC环境下使用svn,以及新手在团队使用svn注意事项)
2025年3月13日 21:50

xweibo(Xweibo新浪,谁能解析下这个微波系统的框架)
2025年3月18日 21:50

batch number是什么意思(什么是批号(batch number)做一个批号是否要根据什么规定)
2025年2月23日 13:00