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])); 这两个函数的缺点在于无法动态分配内存,在转换很长的字符串时可能会浪费较多内存空间;优点是,在不考虑浪费空间的情况下转换较短字符串非常方便.

Vultr VPS新增第18个数据中心 瑞典斯德哥尔摩欧洲VPS主机机房

前几天还在和做外贸业务的网友聊着有哪些欧洲机房的云服务器、VPS商家值得选择的。其中介绍他选择的还是我们熟悉的Vultr VPS服务商,拥有比较多达到17个数据中心,这不今天在登录VULTR商家的时候看到消息又新增一个新的机房。这算是第18个数据中心,也是欧洲VPS主机,地区是瑞典斯德哥尔摩。如果我们有需要欧洲机房的朋友现在就可以看到开通的机房中有可以选择瑞典机房。目前欧洲已经有五个机房可以选择,...

BuyVM($5/月),1Gbps不限流量流媒体VPS主机

BuyVM针对中国客户推出了China Special - STREAM RYZEN VPS主机,带Streaming Optimized IP,帮你解锁多平台流媒体,适用于对于海外流媒体有需求的客户,主机开设在拉斯维加斯机房,AMD Ryzen+NVMe磁盘,支持Linux或者Windows操作系统,IPv4+IPv6,1Gbps不限流量,最低月付5加元起,比美元更低一些,现在汇率1加元=0.7...

美得云(20元)香港特价将军澳CTG+CN2云服务器

美得云成立于2021年,是一家云产品管理服务商(cloud)专业提供云计算服务、DDOS防护、网络安全服务、国内海外数据中心托管租用等业务、20000+用户的选择,43800+小时稳定运行香港特价将军澳CTG+CN2云服务器、采用高端CPU 优质CN2路线 SDD硬盘。香港CTG+CN22核2G3M20G数据盘25元点击购买香港CTG+CN2​2核2G5M30G数据盘39元点击购买香港CTG+CN...

widechartomultibyte为你推荐
李昊天铠甲勇士2刑天的李昊天秘密是什么inode智能客户端inode智能客户端无法正常启动,根本开都开不了flowplayer如何编译flowplayer源码radius认证电信或网通的RADIUS认证都记录些什么?谁能说说ISP的宽带帐号检查流程pps网络电视PPS网络电视是那个国家的公司开发出来的alphablenddelphi中都有哪些控件有AlphaBlend属性,也就是可透明酷源码酷我音乐音乐源文件在哪index是什么意思MySQL里面有一个INDEX关键字,它是什么意思多媒体制作多媒体制做是干什么的网游加速小助手网游加速小助手怎么开通?
fdcservers 韩国俄罗斯 163网 香港cdn 青果网 服务器架设 大容量存储 hnyd 架设服务器 日本bb瘦 softbank邮箱 linode支付宝 中国linux 学生服务器 国外网页代理 腾讯数据库 域名和主机 服务器托管价格 谷歌搜索打不开 2016黑色星期五 更多