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

Unicode与ANSI字符串的转换(MultiByteToWideChar与WideCharToMultiByte)

一、MultiByteToWideChar

int MultiByteToWideChar(UINT uCodePage,DWORD dwFlags,PCSTR pMultiByteStr,int cbMultiByte,PWSTR pWideCharStr,int cchWideChar
);
  1. uCodePage标识了与多字节字符串关联的一个代码页值。
  2. dwFlags标允许进行额外的控制,一般都使用0。
  3. pMultiByteStr指定要转换的字符串。
  4. cbMultiByte指定字符串的长度(字节数)。
    • 如果给cbMultiByte的值是-1,函数便可自动判断源字符串的长度。
  5. pWideCharStr指定了输出缓冲区。
    • 只有当缓冲区能够容纳该数量的宽字符时,转换才会成功。
    • 如果cchWideChar为0,函数就不会执行转换,而是返回一个宽字符数(包括\0)。
  6. cchWideChar指定了输出缓冲区的最大长度。

二、WideCharToMultiByte

int WideCharToMultiByte(UINT ucodePage,DWORD dwFlags,PCWSTR pWideCharStr,int cchWideChar,PSTR pMultiByteStr,int cbMultiByte,PCSTR pDefaultChar,PBOOL pfUsedDefaultChar
);
  1. uCodePage表示了要与新转换的字符串关联的代码页。
  2. dwFlags允许指定额外控制,一般为0。
  3. pWideCharStr指定要转换的字符串的内存地址。
  4. cchWideChar指定该字符串的长度(字符数)
  5. pMultiByteStr指定输出缓冲区。
  6. cbMultiByte指定了输出缓冲区大小(字节数)。
    • 传入0,会导致函数返回目标缓冲区需要的大小。
  7. pDefaultChar指定了无法表示的默认字符。
    • 如果为NULL(很常见),默认字符通常是一个问号,这对文件名来说很危险,因为?是通配符。
  8. pfUsedDefaultChar标识返回结果。如果有字符都成功转换,就是TRUE,否则就是FALSE
    • 可用于验证是否成功转换,通常传入NULL。

三、实例

#include <windows.h>BOOL
StringReverseW (PWSTR pWideCharStr, DWORD cchLength)
{PWSTR pEndOfStr = pWideCharStr + wcsnlen (pWideCharStr, cchLength) - 1;wchar_t cCharT;while (pWideCharStr < pEndOfStr) {cCharT		  = *pWideCharStr;*pWideCharStr = *pEndOfStr;*pEndOfStr	  = cCharT;++pWideCharStr;--pEndOfStr;}return TRUE;
}BOOL
StringReverseA (PSTR pMultiByteStr, DWORD cchLength)
{BOOL fOK		   = FALSE;int nLenOfWideStr  = MultiByteToWideChar (CP_ACP, 0, pMultiByteStr, cchLength, NULL, 0);PWSTR pWideCharStr = (PWSTR)HeapAlloc (GetProcessHeap(), 0, nLenOfWideStr * sizeof (wchar_t));if (!pWideCharStr)return FALSE;MultiByteToWideChar (CP_ACP, 0, pMultiByteStr, cchLength, pWideCharStr, nLenOfWideStr);fOK = StringReverseW (pWideCharStr, nLenOfWideStr);if (fOK) {assert (cchLength == strlen (pMultiByteStr));WideCharToMultiByte (CP_ACP, 0, pWideCharStr, nLenOfWideStr, pMultiByteStr, cchLength, NULL, NULL);}HeapFree (GetProcessHeap(), 0, pWideCharStr);return fOK;
}

http://www.mrgr.cn/news/35724.html

相关文章:

  • AI绘画stable diffusion comfyui的api使用教程
  • luceda ipkiss教程 74:布尔运算去掉部分图层
  • Vue实战教程:手动封装一个全局可自定义图标提示组件
  • 【Elasticsearch】-实现图片向量相似检索
  • 4 php7.4中开发一个websocket 聊天相关配置调用
  • echarts横向柱状图让Y轴的名字和数量在柱状图上方展示
  • 四川财谷通信息技术有限公司抖音小店领域的新势力
  • 保姆级教程!0基础小白也适用,教你用AI美女在小红书“疯狂上分”
  • 企业源代码也需要加密?2024十款源代码加密软件排行榜
  • ChatWiki大模型介绍
  • 黑芝麻大算力SOC,A1000
  • .NET 一款执行命令回显的微软白名单工具
  • MySQL 8 临时关闭缓存
  • 【高等代数笔记】线性空间(十-十三)
  • 国产操作系统
  • MySQL的乐观锁、悲观锁机制及实现
  • 葡萄城亮相2024全球产品经理大会,共探创新之旅
  • 公司用什么软件监控电脑?分享6个常见的电脑监控软件,赶紧Get吧!
  • mac-m1安装nvm,docker,miniconda
  • 电商时代,品牌控价的新征程