字符串 编码转换 ATL
相关链接:
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相关推荐
- chrome字符串编码转换
chrome字符串编码转换 字符串编码转换涉及宽字节表示法与UTF-8表示法之间的转换.宽字节表示法与UTF-16表示法之间的转换.UTF-8表示法与UTF-16表示法之间的转换.UTF-16表示法于 ...
- 分享万能java字符串编码转换工具类
代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima ...
- 站长在线Python精讲:Python中字符串编码转换encode编码和decode解码详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中字符串编码转换:encode编码和decode解码详解>.本知识点主要内容有:常用编码简介.使用encode( ...
- java万能编码转换_分享万能java字符串编码转换工具类
package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public cla ...
- python中字符串编码转换
字符串编码转换程序员最苦逼的地方,什么乱码之类的几乎都是由汉字引起的. 其实编码问题很好搞定,只要记住一点: 任何平台的任何编码,都能和Unicode互相转换. UTF-8与GBK互相转换,那就先把U ...
- unix系统编码 java_Java 正确的做字符串编码转换
字符串的内部表示? 字符串在java中统一用unicode表示( 即utf-16 LE) , 对于 String s = "你好哦!"; 如果源码文件是GBK编码, 操作系统(wi ...
- 关于\x开头的字符串编码转换中文解决方法
做爬虫可能经常遇到爬取到的数据存在编码问题,简直让人头疼,比如爬取到的是这样的: 例如: \xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c 中文是: 你 ...
- js符号转码_js 字符串编码转换函数
escape 方法 对 String 对象编码以便它们能在所有计算机上可读, escape(charString) 必选项 charstring 参数是要编码的任意 String 对象或文字. 说明 ...
- java对字符串编码转换_处理字符串编码转换java类详解
该字符串处理类包括将ISO-8859-1编码的字符串转换成GBK编码 .对输入的字符串进行一次编码转换,防止SQL注入和验证URL地址是否存在的方法. 字符串处理类(编码转化.SQL注入.URL) i ...
最新文章
- Android中Toast的用法简介
- 【Awsome】GitHub 资源汇总(更新中)
- c语言中宏替换时的顺序
- ios加载本地游戏html,使用WKWebView iOS加载本地HTML / Javascript
- 警告warning: strncpy specified bound XX equals destination size
- 【离散数学中的数据结构与算法】十一 错排问题
- SCPPO(二十八):通过JS实现自动刷新进度
- Fiddler中文版安装及使用
- vivo安装android wear,vivo谷歌框架下载-vivo谷歌服务框架v4.1.2 安卓版 - 极光下载站...
- C#——教务管理系统设计01(20181003)
- OV5640摄像头驱动开发讲解
- Redis分布式锁----悲观锁实现,以秒杀系统为例 - 林炳文Evankaka的专栏 - CSDN博客
- 幼儿园体育游戏电子计算机教案,【小班体育活动】_小班体育教案100篇_小班体育游戏活动教案5篇...
- 广东:让“数据跑路”代替“民众跑腿”
- 详细介绍借助Docker Hub访问gcr.io镜像
- 中国煤层气开发市场发展态势及投资规划深度研究报告2022-2028年
- 智能卡 7816协议【转】
- #{}和${}的区别
- (一)计算几何基础(上)
- ue4 GetPhysicsLinearVelocity 为空
热门文章
- python 命令行参数-python获取命令行参数的方法(汇总)
- python中语法错误-Python3 错误和异常
- python翻译程序-Python桌面应用案例:TXT文档翻译工具(源代码)
- 学会python如何兼职-学会Python自动制作PPT,立马在兼职群接到一单
- 如何查看python是多少位的-请问一下该怎么查看python是32位还是64位?
- 以下用于数据存储领域的python第三方库是-python第三方库系列之一--json
- python单词意思-python实现单词本功能
- python一个月能学成嘛-一个月可以学好基础的Python吗?
- python基本使用-Python的基本用法
- pythonurllib模块-Python3中核心模块urllib的用法大全