相关链接:

http://www.vckbase.com/index.php/wv/1206

不同的编码的存储方式不同,经常需要进行编码的转换

重点关注:ATL的内存占用问题,可能导致的栈溢出;

使用 ATL 转换宏,由于不用释放临时空间,所以使用起来非常方便。但是考虑到栈空间的尺寸(VC 默认2M),

使用时要注意几点:

1、只适合于进行短字符串的转换;

2、不要试图在一个次数比较多的循环体内进行转换;

3、不要试图对字符型文件内容进行转换,因为文件尺寸一般情况下是比较大的;

4、对情况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();

1、函数 WideCharToMultiByte(),转换 UNICODE 到 MBCS。使用范例:

LPCOLESTR lpw = L"Hello,你好";
size_t wLen = wcslen( lpw ) + 1; // 宽字符字符长度,+1表示包含字符串结束符

int aLen=WideCharToMultiByte( // 第一次调用,计算所需 MBCS 字符串字节长度
CP_ACP,
0,
lpw, // 宽字符串指针
wLen, // 字符长度
NULL,
0, // 参数0表示计算转换后的字符空间
NULL,
NULL);

LPSTR lpa = new char [aLen];

WideCharToMultiByte(
CP_ACP,
0,
lpw,
wLen,
lpa, // 转换后的字符串指针
aLen, // 给出空间大小
NULL,
NULL);

// 此时,lpa 中保存着转换后的 MBCS 字符串
... ... ... ...
delete [] lpa;

 

2、函数 MultiByteToWideChar(),转换 MBCS 到 UNICODE。使用范例:

LPCSTR lpa = "Hello,你好";
size_t aLen = strlen( lpa ) + 1;

int wLen = MultiByteToWideChar(
CP_ACP,
0,
lpa,
aLen,
NULL,
0);

LPOLESTR lpw = new WCHAR [wLen];
MultiByteToWideChar(
CP_ACP,
0,
lpa,
aLen,
lpw,
wLen);
... ... ... ...
delete [] lpw;

3、使用 ATL 提供的转换宏。

A2BSTR OLE2A T2A W2A
A2COLE OLE2BSTR T2BSTR W2BSTR
A2CT OLE2CA T2CA W2CA
A2CW OLE2CT T2COLE W2COLE
A2OLE OLE2CW T2CW W2CT
A2T OLE2T T2OLE W2OLE
A2W OLE2W T2W W2T

上表中的宏函数,其实非常容易记忆:

2 好搞笑的缩写,to 的发音和 2 一样,所以借用来表示“转换为、转换到”的含义。
A ANSI 字符串,也就是 MBCS。
W、OLE 宽字符串,也就是 UNICODE。
T 中间类型T。如果定义了 _UNICODE,则T表示W;如果定义了 _MBCS,则T表示A
C const 的缩写

使用范例:

#include < atlconv.h >

void fun()
{
USES_CONVERSION; // 只需要调用一次,就可以在函数中进行多次转换

LPCTSTR lp = OLE2CT( L"Hello,你好") );
... ... ... ...
// 不用显式释放 lp 的内存,因为
// 由于 ATL 转换宏使用栈作为临时空间,函数结束后会自动释放栈空间。
}

转载于:https://www.cnblogs.com/gdutbean/archive/2013/04/22/3036356.html

字符串 编码转换 ATL相关推荐

  1. chrome字符串编码转换

    chrome字符串编码转换 字符串编码转换涉及宽字节表示法与UTF-8表示法之间的转换.宽字节表示法与UTF-16表示法之间的转换.UTF-8表示法与UTF-16表示法之间的转换.UTF-16表示法于 ...

  2. 分享万能java字符串编码转换工具类

    代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima ...

  3. 站长在线Python精讲:Python中字符串编码转换encode编码和decode解码详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中字符串编码转换:encode编码和decode解码详解>.本知识点主要内容有:常用编码简介.使用encode( ...

  4. java万能编码转换_分享万能java字符串编码转换工具类

    package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public cla ...

  5. python中字符串编码转换

    字符串编码转换程序员最苦逼的地方,什么乱码之类的几乎都是由汉字引起的. 其实编码问题很好搞定,只要记住一点: 任何平台的任何编码,都能和Unicode互相转换. UTF-8与GBK互相转换,那就先把U ...

  6. unix系统编码 java_Java 正确的做字符串编码转换

    字符串的内部表示? 字符串在java中统一用unicode表示( 即utf-16 LE) , 对于 String s = "你好哦!"; 如果源码文件是GBK编码, 操作系统(wi ...

  7. 关于\x开头的字符串编码转换中文解决方法

    做爬虫可能经常遇到爬取到的数据存在编码问题,简直让人头疼,比如爬取到的是这样的: 例如: \xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c 中文是: 你 ...

  8. js符号转码_js 字符串编码转换函数

    escape 方法 对 String 对象编码以便它们能在所有计算机上可读, escape(charString) 必选项 charstring 参数是要编码的任意 String 对象或文字. 说明 ...

  9. java对字符串编码转换_处理字符串编码转换java类详解

    该字符串处理类包括将ISO-8859-1编码的字符串转换成GBK编码 .对输入的字符串进行一次编码转换,防止SQL注入和验证URL地址是否存在的方法. 字符串处理类(编码转化.SQL注入.URL) i ...

最新文章

  1. Android中Toast的用法简介
  2. 【Awsome】GitHub 资源汇总(更新中)
  3. c语言中宏替换时的顺序
  4. ios加载本地游戏html,使用WKWebView iOS加载本地HTML / Javascript
  5. 警告warning: strncpy specified bound XX equals destination size
  6. 【离散数学中的数据结构与算法】十一 错排问题
  7. SCPPO(二十八):通过JS实现自动刷新进度
  8. Fiddler中文版安装及使用
  9. vivo安装android wear,vivo谷歌框架下载-vivo谷歌服务框架v4.1.2 安卓版 - 极光下载站...
  10. C#——教务管理系统设计01(20181003)
  11. OV5640摄像头驱动开发讲解
  12. Redis分布式锁----悲观锁实现,以秒杀系统为例 - 林炳文Evankaka的专栏 - CSDN博客
  13. 幼儿园体育游戏电子计算机教案,【小班体育活动】_小班体育教案100篇_小班体育游戏活动教案5篇...
  14. 广东:让“数据跑路”代替“民众跑腿”
  15. 详细介绍借助Docker Hub访问gcr.io镜像
  16. 中国煤层气开发市场发展态势及投资规划深度研究报告2022-2028年
  17. 智能卡 7816协议【转】
  18. #{}和${}的区别
  19. (一)计算几何基础(上)
  20. ue4 GetPhysicsLinearVelocity 为空

热门文章

  1. python 命令行参数-python获取命令行参数的方法(汇总)
  2. python中语法错误-Python3 错误和异常
  3. python翻译程序-Python桌面应用案例:TXT文档翻译工具(源代码)
  4. 学会python如何兼职-学会Python自动制作PPT,立马在兼职群接到一单
  5. 如何查看python是多少位的-请问一下该怎么查看python是32位还是64位?
  6. 以下用于数据存储领域的python第三方库是-python第三方库系列之一--json
  7. python单词意思-python实现单词本功能
  8. python一个月能学成嘛-一个月可以学好基础的Python吗?
  9. python基本使用-Python的基本用法
  10. pythonurllib模块-Python3中核心模块urllib的用法大全