widechartomultibyte跪求MultiByteToWideChar函数的用法

widechartomultibyte  时间:2021-07-16  阅读:()

我知道一个字符的unicode,如何textout打出来。

构造一个单字符的串,然后用Unicode版本的API应该能办到吧: wchar_t txt[2]; txt[1]=0; txt[0]=编码; TextOutW(dc,x,y,txt,1);

宽字符转多字节,使用CStringA可以吗

SDK中有一个API函数 WideCharToMultiByte 可以实现的。

函数声明如下: int WideCharToMultiByte( UINT CodePage, // code page DWORD dwFlags, // performance and mapping flags LPCWSTR lpWideCharStr, // wide-character string hWideChar, // number of chars in string LPSTR lpMultiByteStr, // buffer for new string int cbMultiByte, // size of buffer LPCSTR lpDefaultChar, // default for unmappable chars LPBOOL lpUsedDefaultChar // set when default char used); 这方面的问题,你还可以参考 windows 核心 编程 第二章 中关于Unicode编码和ANSI编码的内容。

跪求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[20] = {"多字节字符串!OK!"}; 我们需要知道转化后的宽字符需要多少个数组空间.虽然在这个里程里面,我们可以直接定义一个20*2宽字符的数组,并且事实上将运行得非常轻松愉快.但假如多字节字符串更多,达到上千个乃至上万个,我们将会发现其中浪费的内存将会越来越多.所以以多字节字符的个数的两倍作为宽字符数组下标的声明绝对不是一个好主意. 所幸,我们能够确知所需要的数组空间. 我们只需要将MultiByteToWideChar()的第四个形参设为-1,即可返回所需的短字符数组空间的个数: DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, sText, -1, NULL, 0); 接下来,我们只需要分配响应的数组空间: wchar_t *pwText; pwText = new wchar_t[dwNum]; if(!pwText) { delete []pwText; } 接着,我们就可以着手进行转换了.在这里以转换成ASCII码做为例子: MultiByteToWideChar (CP_ACP, 0, psText, -1, sText, dwSize); 最后,使用完毕当然要记得释放占用的内存: delete []psText; 同理,宽字符转为多字节字符的代码如下: wchar_t wText[20] = {L"宽字符转换实例!OK!"}; DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE); char *psText; psText = new char[dwNum]; if(!psText) { delete []psText; } WideCharToMultiByte (CP_OEMCP,NULL,lpcwszStr,-1,psText,dwNum,NULL,FALSE); delete []psText; 如果之前我们已经分配好空间,并且由于字符串较短,可以不理会浪费的空间,仅仅只是想简单地将短字符和宽字符相互转换,那有没有什么简便的方法呢? WIN32 API里没有符合这种要求的函数,但我们可以自己进行封装: //------------------------------------------------------------------------------------- //Description: // This function maps a character string to a wide-character (Unicode) string // //Parameters: // lpcszStr: [in] Pointer to the character string to be converted // lpwszStr: [out] Pointer to a buffer that receives the translated string. // dwSize: [in] Size of the buffer // //Return Values: // TRUE: eed // FALSE: Failed // //Example: // MByteToWChar(szA,szW,sizeof(szW)/sizeof(szW[0])); //--------------------------------------------------------------------------------------- BOOL MByteToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr, DWORD dwSize) { // Get the required size of the buffer that receives the Unicode // string. DWORD dwMinSize; dwMinSize = MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, NULL, 0); if(dwSize < dwMinSize) { return FALSE; } // Convert headers from ASCII to Unicode. MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMinSize); return TRUE; } //------------------------------------------------------------------------------------- //Description: // This function maps a wide-character string to a new character string // //Parameters: // lpcwszStr: [in] Pointer to the character string to be converted // lpszStr: [out] Pointer to a buffer that receives the translated string. // dwSize: [in] Size of the buffer // //Return Values: // TRUE: eed // FALSE: Failed // //Example: // MByteToWChar(szW,szA,sizeof(szA)/sizeof(szA[0])); //--------------------------------------------------------------------------------------- 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[10] = {L"函数示例"}; char sText[20]= {0}; WCharToMByte(wText,sText,sizeof(sText)/sizeof(sText[0])); MByteToWChar(sText,wText,sizeof(wText)/sizeof(wText[0])); 这两个函数的缺点在于无法动态分配内存,在转换很长的字符串时可能会浪费较多内存空间;优点是,在不考虑浪费空间的情况下转换较短字符串非常方便.

cloudcone:特价便宜VPS补货通知贴,SAS或SSD低价有磁盘阵列,SAS或SSD raid10 硬盘

cloudcone经常性有特价促销VPS放出来,每次的数量都是相当有限的,为了方便、及时帮助大家,主机测评这里就做这个cloudcone特价VPS补货专题吧,以后每次放货我会在这里更新一下日期,方便大家秒杀!官方网站:https://cloudcone.com/预交费模式,需要充值之后方可使用,系统自动扣费!信用卡、PayPal、支付宝,均可付款购买!为什么说cloudcone值得买?cloudc...

DediPath($1.40),OpenVZ架构 1GB内存

DediPath 商家成立时间也不过三五年,商家提供的云服务器产品有包括KVM和OPENVZ架构的VPS主机。翻看前面的文章有几次提到这个商家其中机房还是比较多的。其实对于OPENVZ架构的VPS主机以前我们是遇到比较多,只不过这几年很多商家都陆续的全部用KVM和XEN架构替代。这次DediPath商家有基于OPENVZ架构提供低价的VPS主机。这次四折的促销活动不包括512MB内存方案。第一、D...

野草云99元/月 ,香港独立服务器 E3-1230v2 16G 30M 299元/月 香港云服务器 4核 8G

野草云月末准备了一些促销,主推独立服务器,也有部分云服务器,价格比较有性价比,佣金是10%循环,如果有时间请帮我们推推,感谢!公司名:LucidaCloud Limited官方网站:https://www.yecaoyun.com/香港独立服务器:CPU型号内存硬盘带宽价格购买地址E3-1230v216G240GB SSD或1TB 企盘30M299元/月点击购买E5-265016G240GB SS...

widechartomultibyte为你推荐
知识库管理系统什么是知识管理知识库管理系统如何加强知识库的管理策略组怎样打开组策略???最开放的浏览器目前最好的游览器?查字网拐字换什么偏旁 成新字qq号查询怎样查找本地qq号码mindmanager破解版求mindmanager 2019 的注册机webcrackwebcrack4.0imqq官网中国v家官网网址问卷星登陆请问问卷星怎么设置答题时间?
主机屋 罗马假日广场 flashfxp怎么用 kvmla 美国主机网 NetSpeeder 华为4核 嘉洲服务器 ibox官网 godaddy域名证书 微软服务器操作系统 vip域名 爱奇艺会员免费试用 德讯 主机返佣 阿里云邮箱登陆 umax 中国电信宽带测速 小夜博客 密钥索引 更多