字符串及处理之七: ATL转换宏

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
ATL转换宏
ATL:转换宏是各种字符编码之间进行转换的一种很方便的方式,在函数调用时,它们显得非常有用。为了使用这些宏,需要先包含atlconv.h头文件。ATL转换宏的名称是根据下面的模式来命名的[源类型]2[新类型]或者[源类型]2C[新类型]。据有第二种形式的名字的宏的转换结果是常量指针(对应名字中的"C")。各种类型的简称如下:
A: MBCS string, char* (A for ANSI)
W: Unicode string, wchar_t* (W for wide)
T: TCHAR string, TCHAR*
OLE: OLECHAR string, OLECHAR* (in practice, equivalent to W)
BSTR: BSTR (used as the destination type only)

下面是一些各种转换宏的使用例子:

// Functions taking various strings:
void Foo ( LPCWSTR wstr );
void Bar ( BSTR bstr );
// Functions returning strings:
void Baz ( BSTR* pbstr );
#include <atlconv.h>
main()
{
using std::string;
USES_CONVERSION; // declare locals used by the ATL macros
// Example 1: Send an MBCS string to Foo()
LPCSTR psz1 = "Bob";
string str1 = "Bob";

Foo ( A2CW(psz1) );
Foo ( A2CW(str1.c_str()) );

// Example 2: Send a MBCS and Unicode string to Bar()
LPCSTR psz2 = "Bob";
LPCWSTR wsz = L"Bob";
BSTR bs1;
CComBSTR bs2;

bs1 = A2BSTR(psz2); // create a BSTR
bs2.Attach ( W2BSTR(wsz) ); // ditto, assign to a CComBSTR
Bar ( bs1 );
Bar ( bs2 );

SysFreeString ( bs1 ); // free bs1 memory
// No need to free bs2 since CComBSTR will do it for us.

// Example 3: Convert the BSTR returned by Baz()
BSTR bs3 = NULL;
string str2;
Baz ( &bs3 ); // Baz() fills in bs3
str2 = W2CA(bs3); // convert to an MBCS string
SysFreeString ( bs3 ); // free bs3 memory
}
ATLCONV.H // This is a part of the Active Template Library. // Copyright (C) 1996-1998 Microsoft Corporation // All rights reserved. // // This source code is only intended as a supplement to the // Active Temp 阅读详情

相关推荐

VC++ 不适用 atlconv.h(ATL字符集转换)实现 A2W、W2A、_UnicodeToUtf8、_Utf8ToUnicode 函数

CP_ACP 为缺省当前系统所在的语言字符集的(可在系统地区/语言之中修改)操作系统内部通常只带对应地区/语言的字符集,其它地区/语言字符集需要安装的。932(为鬼子日文 shift_jis)936(为简体中文GBK字符集)详情:可以自行查阅代码页号。949(为阿西八韩文)950(为繁体中文)

liulilittle的博客 527

VC的字符串转换atlconv的使用

如果单纯将char* 转wchar*/wchar*转char*, 可以用altconv提供的函数库进行转换, 比如A2T, T2A,A2W,W2A, 但记得在使用这些函数前加上USES_CONVERSION; 例子: #include .... CString lvT; mEdSrvIp.GetWindowTextW(lvT); USES_CONVERSION; char* lv

rocklee的专栏 1017

vc6使用atlconv.h的方法,涉及USES_CONVERSION

除了#include 外,还要#include "afxconv.h",就这么简单…… 搞了我2天。 另外,貌似除了ATL和MFC程序可以使用这个T2A之类的外,其他好像不行。

saiky的专栏 2480

ATL MFC 字符串转换

ATL3.0 的字符串转换 ATL3.0中常用的字符串转换无非是 A2W , W2A , A2T , T2A , A2OLE 等,当然在使用这些之前(函数开始处)必须使用USES_CONVERSION 。这些很大程度上方便了宽字符串与多字节字符串间的转换,但是在使用这些时有一些限制。其中非常重要的一点是,这些不宜在循环中使用。 ATL7.0 中的字符串转换 类 和 则很好地避免

aidan2856的专栏 1230

关于ATL中的字符转换

ATL提供了一些字符串转换,必要时它们在前面描述的各种字符类型之间进行转换。当编译选项使得源字符类型与目标字符类型相同时,这些并不执行转换,事实上什么也没干。的名字使用了各种字符数据类型的缩写:T表示指向Win32 TCHAR字符数据类型的指针---LPTSTR参数W表示指向Unicode wchar_t字符数据类型的指针---LPWSTR参数A表示指向Win32 TCHAR字符数据

凤之焚的专栏 1899

ATL字符串转换

有比MultiByteToWideChar和WideCharToMultiByte更简单的字符串转换,你相信吗? 头文件 d:/program files/microsoft visual studio 8/vc/atlmfc/include/atlconv.h 如果要使用ATL字符串转换,请先定义 USES_CONVERSION;  // 只需要调用一次,就可以在函数中进行多

云守护的专栏 9898

VC中的字符串转换

ATL7.0引入了几个新的转换类和,现有的提供了显着的改善。新的字符串转换类和的名称,采取的形式如下: C SourceType 2[C]DestinationType[EX] 其中,[C]表示目的类型是const类型的,[EX]表示指定了保存字符串数据的固定静态缓存区的大小,如果字符串转换的结果超过了模板参数的大小,...

aaa407217484的博客 217

ATL/MFC字符串处理技术详解

在Windows平台开发中,字符串处理是每个C++程序员都必须掌握的基本技能。ATL/MFC框架提供了一套完善的字符串处理机制,主要围绕`CStringT`模板类和其默认实现`CString`展开。本文将深入解析这套字符串处理系统的设计理念和使用方法。 ## CStringT模板类 `CStringT`是ATL/MFC共享库中的核心字符串模板类,它提供了强大而灵活的字符串操作功能。这个模板类的...

gitblog_00564的博客 496

ATL字符串转换

字符串的ASCII和UNICODE之间的转换很常用,Win32提供了API函数MultiByteToWideChar和WideCharToMultiByte来提供这种功能。但凡Win32的API,参数调用都不会少,因此使用起来也就觉得有点繁琐。ATL3中提供了字符串转换,如T2W、A2T等,不过使用它们需要借助本地变量,因此在使用之前需要声明USES_CONVERSION来声明本地变量.而且还

编程的那点事 2491

ATL的W2A和A2W转换Unicode与ANSI字符串

1 #include 2 代码如下: 3 4 //使用ATL的W2A和A2W必须使用USES_CONVERSION 5 USES_CONVERSION; 6 7 //Unicode字符串 8 wchar_t* wszText=L"1.Unicode字符转换为ANSI;"; 9 printf("%s\n",W2A(wszText)); 10 11 /

IFEIXIANG 681

ATL浅谈(二)

ATL浅谈(二) 由于上一篇写的太浅,这篇谈点实际的东西。 ATL和STL一样,是由一些小巧、高效和灵活的类组成的集合。但是,伴随着权利而来的是职责。和STL一样,只有有经验的C++程序员(最好的STL经验)才能有效地使用它。 ATL给我们提供了什么?那些希望在对COM一无所知的情况下建立COM对象的人,ATL不适合他们。事实上,使用ATL意味着要非常熟悉C++中的COM以及ATL本身的实现细节

wangweixing2000 2695

ATl中字符转换

  使用ATL中字符转换时,执行体内遗写USES_CONVERSION, 找到定义USES_CONVERSION的定义处,#define USES_CONVERSION int _convert = 0; _convert; UINT _acp = CP_ACP; _acp; LPCWSTR _lpw = NULL; _lpw; LPCSTR _lpa = NULL; _lpa字符串转换

Student life 578

C++字符串完全指南(2) - STL和ATL

C++字符串完全指南(2) - STL和ATL类 STL类 STL只有一个字符串类,即basic_string。basic_string管理一个零结尾的字符数组。字符类型由模板参数决定。通常,basic_string处理为不透明对象。可以获得一个只读指针来访问缓冲区,但写操作都是由basic_string的成员函数进行的。 basic_string预定义了二个特例:string,含有c

zhanghaifeng1419的专栏 598

ATL与MFC中的CString

       在ATL和MFC中都可以使用CString类来处理字符串,如果在MFC中要使用ATL中的CString,需要使用名字空间ATL::CString。在书写中,可以使用CStringT,CStringA,CStringW三种格式,如果是UNICODE工程,CStringT等同于CStringW,如果是ANSI工程,CStringT等同于CStringA.下面介绍几个常用的CString使用技巧。1.模仿.NET中的split方法      在.NET里的string类中有个split方法,即传入一

Richard_Sky_Sun的专栏 3671
上一篇: 字符串及处理之六: 转换实例
下一篇: 电脑围棋中的人工智能技术
white_cpf
博客等级 码龄26年 2粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值