当前位置: 首页 > article >正文

MultiByteToWideCharWideCharToMultiByte 函数介绍

1.MultiByteToWideChar

函数功能:该函数映射一个字符串到一个宽字符(unicode)的字符串。由该函数映射的字符串没必要是多字节字符组。
函数原型:
int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cchMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);
 

2.WideCharToMultiByte

函数功能:该函数映射一个unicode字符串到一个多字节字符串。
函数原型:
int WideCharToMultiByte(
UINT CodePage, //指定执行转换的代码页
DWORD dwFlags, //允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符
LPCWSTR lpWideCharStr, //指定要转换为宽字节字符串的缓冲区
int cchWideChar, //指定由参数lpWideCharStr指向的缓冲区的字符个数
LPSTR lpMultiByteStr, //指向接收被转换字符串的缓冲区
int cchMultiByte, //指定由参数lpMultiByteStr指向的缓冲区最大值
LPCSTR lpDefaultChar, //遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符
LPBOOL pfUsedDefaultChar //至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE
);

3.代码案例

// unicode.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>//------------------------------------------------------------------------------------- 
//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: Succeed 
// 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: Succeed 
// 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;
}
int main()
{wchar_t wText[] = { L"unicode字符串" };char sText[100] = { "ANSI 字符串" };WCharToMByte(wText, sText, sizeof(sText) / sizeof(sText[0]));欲生效需要屏蔽MByteToWChar(sText, wText, sizeof(wText) / sizeof(wText[0]));printf("%d\n", lstrlenW(wText));printf("%d\n", lstrlenA(sText));printf("%d\n", sizeof(wText));printf("%d\n", sizeof(sText));printf("输出WideCharToMultiByte unicode转多字节\n");printf("输出unicode wText:\n");for (int j = 0; j<lstrlen(wText); j++)printf("%c", wText[j]);printf("\n输出ANSI sText:\n");for (int j = 0; j<sizeof(sText); j++)printf("%c", sText[j]);printf("\n\n");/*MByteToWChar(sText, wText, sizeof(wText) / sizeof(wText[0]));//欲生效需要屏蔽WCharToMByte(wText, sText, sizeof(sText) / sizeof(sText[0]));printf("输出MultiByteToWideChar 多字节转unicode\n");printf("\n输出unicode wText:\n");for (int j = 0; j<lstrlenW(wText); j++)printf("%c", wText[j]);printf("\n输出ANSI sText:\n");for (int j = 0; j<sizeof(sText); j++)printf("%c", sText[j]);printf("\n\n\n\n");// return 0;*///第二案例///*// TODO: Place code here.wchar_t wszTest[] = L"unicod";wchar_t wszTestNew[] = L"unicod字符串";int nwszTestLen = lstrlenW(wszTest);            // 6int nwszTestNewLen = lstrlenW(wszTestNew);        // 9 int nwszTestSize = sizeof(wszTest);                // 14int nwszTestNewSize = sizeof(wszTestNew);        //    20printf("[unicode]长度:\n");for (int j = 0; j<nwszTestLen; j++)printf("%c", wszTest[j]);printf("\n");printf("[unicode字符串]长度:\n");for (int j = 0; j<nwszTestNewLen; j++)printf("%c", wszTestNew[j]);printf("\n");printf("[unicode]大小:\n");for (int j = 0; j<nwszTestSize; j++)printf("%c", wszTest[j]);printf("\n");printf("[unicode字符串]大小:\n");for (int j = 0; j<nwszTestNewSize; j++)printf("%c", wszTestNew[j]);printf("\n");int nChar = WideCharToMultiByte(CP_ACP, 0, wszTestNew, -1, NULL, 0, NULL, NULL);    // 13, 返回结果已包含'\0'所要占用的内存nChar = nChar * sizeof(char);                    // 13, 其实这一步可不需要,请见本文前面解释char* szResult = new char[nChar];ZeroMemory(szResult, nChar);int i = WideCharToMultiByte(CP_ACP, 0, wszTestNew, -1, szResult, nChar, NULL, NULL);    // 13int nszResultLen = lstrlenA(szResult);            // 12int nszResultSize = sizeof(szResult);            // 4printf("[unicode字符串]转换后长度:\n");for (int j = 0; j<nszResultLen; j++)printf("%c", szResult[j]);printf("\n");printf("[unicode字符串]转换后大小:\n");for (int j = 0; j<nszResultSize; j++)printf("%c", szResult[j]);printf("\n\n\n\n\n");char szTest[] = "ANSIxx";char szTestNew[] = "ANSIxx字符串";int nszTestLen = lstrlenA(szTest);                // 6int nszTestNewLen = lstrlenA(szTestNew);        // 12int nszTestSize = sizeof(szTest);                // 7int nszTestNewSize = sizeof(szTestNew);            // 13printf("[ANSI]长度:\n");for (int j = 0; j<nszTestLen; j++)printf("%c", szTest[j]);printf("\n");printf("[ANSI字符串]长度:\n");for (int j = 0; j<nszTestNewLen; j++)printf("%c", szTestNew[j]);printf("\n");printf("[ANSI]大小:\n");for (int j = 0; j<nszTestSize; j++)printf("%c", szTestNew[j]);printf("\n");printf("[ANSI字符串]大小:\n");for (int j = 0; j<nszTestNewSize; j++)printf("%c", szTestNew[j]);printf("\n");int nWChar = MultiByteToWideChar(CP_ACP, 0, szTestNew, -1, NULL, 0);        // 10, 返回结果已包含'\0'所要占用的内存nWChar = nWChar * sizeof(wchar_t);                // 20wchar_t* wszResult = new wchar_t[nWChar];ZeroMemory(wszResult, nWChar);int j = MultiByteToWideChar(CP_ACP, 0, szTestNew, -1, wszResult, nWChar);    // 10int nwszResultLen = lstrlenW(wszResult);        // 9int nwszResultSize = sizeof(wszResult);            // 4printf("[ANSI字符串]转换后长度:\n");for (int j = 0; j<nwszResultLen; j++)printf("%c", wszResult[j]);printf("\n");printf("[ANSI字符串]转换后大小:\n");for (int j = 0; j<nwszResultSize; j++)printf("%c", wszResult[j]);printf("\n");return 0;//*/}

4.结果


http://www.lryc.cn/news/2419485.html

相关文章:

  • 机器学习——多项式拟合
  • java6下载安装_windows下如何安装java6.0
  • 使用C#的DrawString方法绘制文本
  • 建筑抗震设计规范
  • java入门基础教程(纯干货知识点+视频资源)
  • CC2530 zigbee模块概述与环境搭建
  • petri网基本概念
  • 【自动控制理论】 相位裕度和增益裕度
  • 数据库,万能密码与密码解析
  • android 通过广播唤醒被杀死的app
  • 工具之《activemq管理界面介绍》
  • 手把手教你用Python爬虫入门
  • excel文件损坏修复绝招_修复数据工具大盘点,让你快速掌握电脑数据恢复的秘密武器...
  • 13.【openCV_imread()函数详解】
  • 电子工程师-单片机的开发过程1
  • Qt学习12:常用Layout布局方式总结
  • 二进制文件、文本文件
  • linux tar命令解析(压缩解压)(tar指令)(十分之坑,千万不要在windows上解压带有软链接的压缩文件,会把软链接搞没了!软链接丢失、软链接失效)
  • 串联/并联谐振电路及其应用
  • 前端必知:29,改变鼠标手势及鼠标手势的应用
  • 计算机组成原理 01:计算机的发展历程
  • oracle instant-client下载与安装sqlplus
  • 欢迎光临
  • 每日一点硬件小知识—PS/2接口
  • Linux系统安装教程(虚拟机版)
  • 【C++入门必看】C++从0到1入门编程
  • 彻底解决小米随身WIFI(MiWIFI)安装失败,无法使用无线网卡功能的方法
  • 适合小白学的基础知识—SSTI漏洞学习
  • 终端准入安全之五种准入规则简介
  • Dynamics 365配置ADFS