字符串的格式相互转换T2W.T2OLE

MFC字符转换技巧与实践:从基础到高级 在ATL/MFC编程中,CString类是一个非常强大的工具,用于简化和优化字符串处理操作。CString类抽象了内存管理和字符编码转换的复杂性,使得开发者能够专注于实现业务逻辑。它不仅提供了标准的字符串操作功能,还针对Windows API和COM提供了额外的便利方法。由于CString可以处理MBCS(多字节字符集)和Unicode两种字符编码,它在字符转换中扮演了重要的角色。是一个在 MFC 应用程序中常用的函数,它的功能是在一个消息框中显示一条消息,并且等待用户响应。 阅读详情

字符串的格式相互转换

编程实践总结 2009-12-15 20:31:34 阅读13 评论0 字号:大中小

关于字符串的一些相关知识:http://c.chinaitlab.com/basic/762624.html
其中有关于ATL转换宏的的一些说明,用这种方式进行转换非常简单 没事的时候再看看吧

来源:[url]http://www.wangchao.net.cn/bbsdetail_25257.html[/url]  大家也许都觉得ATL中的W2T ,T2W等一系列宏很方便,但一定要小心,因为: 它们从栈上分配内存!!!内部调用了alloca,该函数从栈上分配返回字符串的内存,而且,直到调用它的函数返回前,该内存不会被释放。
 如果在一个循环中,这类宏被你反复调用几万次时,你将不可避免地产生stack overflow !!而这个情况在循环次数不大时似乎一切正常,可当次数大是就会一败涂地。
 解决的方法是,将用到该宏的语句独立封装成一个函数,然后,就可以心安理得地无限次调用了。

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

下面一个例子:
    USES_CONVERSION;  // 只需要调用一次,就可以在函数中进行多次转换
    char a[12] = "china";
    ::MessageBoxW( NULL, A2W(a), L"", MB_ICONASTERISK|MB_TASKMODAL|MB_OK );

使用 ATL 转换宏,由于不用释放临时空间,所以使用起来非常方便。但是考虑到栈空间的尺寸(VC 默认2M),使用时要注意几点:
    1、只适合于进行短字符串的转换;
    2、不要试图在一个次数比较多的循环体内进行转换;
    3、不要试图对字符型文件内容进行转换,因为文件尺寸一般情况下是比较大的;
    4、对情况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();

使用 ATL 提供的转换宏。
 
A2BSTROLE2AT2AW2A
A2COLEOLE2BSTRT2BSTRW2BSTR
A2CTOLE2CAT2CAW2CA
A2CWOLE2CTT2COLEW2COLE
A2OLEOLE2CWT2CWW2CT
A2TOLE2TT2OLEW2OLE
A2WOLE2WT2WW2T

上表中的宏函数,其实非常容易记忆:
2好搞笑的缩写,to 的发音和 2 一样,所以借用来表示“转换为、转换到”的含义。
AANSI 字符串,也就是 MBCS。
W、OLE宽字符串,也就是 UNICODE。
T中间类型T。如果定义了 _UNICODE,则T表示W;如果定义了 _MBCS,则T表示A
Cconst 的缩写


摘自别处: 1.string 转 CString CString.format(”%s”, string.c_str()); 2.char 转 CString CString.format(”%s”, char*); 3.char to string string s(char *); 4.string 转 char * char *p = string.c_str(); 5.CString 转 string string s(CString.GetBuffer()); 6.string -> CString CString.format(”%s”, string.c_str()); 用c_str()确实比data()要好. 7.CString -> string string s(CString.GetBuffer()); GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. 8.有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”/0“的字符串数组 2,c_str(),返回有”/0“的字符串数组 3,copy() 9.将字符转换为整数,可以使用atoi、_atoi64或atol。 10.将数字转换为CString变量,可以使用CString的Format函数 CString s; int i = 64; s.Format(”%d”, i) Format函数的功能很强,值得你研究一下。 11.cstring TO char * charpoint=strtest.GetBuffer(strtest.GetLength()); 12.CString转换 char[100] char a[100]; CString str(”aaaaaa”); strncpy(a,(LPCTSTR)str,sizeof(a)); 

==================================================
USES_CONVERSION; char* tt = W2A(str);
------------------------------------------------------
VS2005下的Unicode的问题:
CStringA WChar2Char( const wchar_t* wszStr )
{
    CStringA cStr;
    if( NULL == wszStr )
    {
        return cStr;
    }
    int iSize = ::WideCharToMultiByte(  CP_ACP, 0, wszStr, -1, NULL, 0, NULL,NULL );
    char* p = cStr.GetBuffer( iSize + 10 );
    memset( p, 0, iSize+10 );
    iSize = ::WideCharToMultiByte( CP_ACP, 0, wszStr, -1, p, iSize,  NULL, NULL);
    cStr.ReleaseBuffer();
    return cStr;
}

CStringW Char2WChar( const char* szStr )
{
    CStringW wStr;
    if( NULL == szStr )
    {
        return wStr;
    }
    int nLen = ::MultiByteToWideChar( CP_ACP, 0, szStr, -1, NULL,0);
    wchar_t* p = wStr.GetBuffer( nLen+10 );
    wmemset( p, 0, nLen+10 );
    nLen = ::MultiByteToWideChar( CP_ACP,0,szStr,-1,p,nLen);
    wStr.ReleaseBuffer();
    return wStr;
}

cc = WChar2Char(str.GetBuffer()).GetBuffer();

==============================================================================

     
《C++标准函数库》中说的 
有三个函数可以将字符串的内容转换为字符数组和C—string 

1.data(),返回没有”/0“的字符串数组 
2,c_str(),返回有”/0“的字符串数组 
3,copy()
 
.................................................................
int 转 CString:
CString.Format("%d",int);
...............................
string 转 CString 
CString.format("%s", string.c_str()); 
用c_str()确实比data()要好.
 
.......................................
char* 转 CString 
CString.format("%s", char*);
CString strtest; 
char * charpoint; 
charpoint="give string a value"; 
strtest=charpoint; //直接付值

...................................................................
CString 转 int
CString ss="1212.12"; 
int temp="atoi"(ss); //atoi _atoi64或atol

将字符转换为整数,可以使用atoi、_atoi64或atol。 
int int_chage = atoi((lpcstr)ss) ;
或:
   CString str = "23";
   UINT uint;
   sscanf(str, "%d", uint);

..............................
string 转 int
..............................
char* 转 int 
#include <stdlib.h> 

int atoi(const char *nptr); 
long atol(const char *nptr); 
long long atoll(const char *nptr); 
long long atoq(const char *nptr); 
...................................................................
CString 转 string
string s(CString.GetBuffer()); 
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
 
..........................................
int 转 string 
..........................................
char* 转 string 
string s(char *); 
你的只能初始化,在不是初始化的地方最好还是用assign().
...................................................................
CString 转 char * 
CString strtest="wwwwttttttt";
charpoint=strtest.GetBuffer(strtest.GetLength());
CString转换 char[100] 
char a[100]; 
CString str("aaaaaa"); 
strncpy(a,(LPCTSTR)str,sizeof(a));
CString str="aaa";   
char* ch;   
ch=(char*)(LPCTSTR)str;

..........................................
int 转 char *
在stdlib.h中有个函数itoa() 
itoa的用法: 
itoa(i,num,10); 
i 需要转换成字符的数字 
num 转换后保存字符的变量 
10 转换数字的基数(进制)10就是说按照10进制转换数字。还可以是2,8,16等等你喜欢的进制类型 
原形:char *itoa(int value, char* string, int radix); 
实例: 
#include "stdlib.h" 
#include "stdio.h" 
main() 
{ 
int i="1234"; 
char s[5]; 
itoa(i,s,10); 
printf("%s",s); 
getchar(); 
}
..........................................
string 转 char * 
char *p = string.c_str(); 

string aa("aaa"); 
char *c=aa.c_str();
string mngName; 
char t[200]; 
memset(t,0,200); 
strcpy(t,mngName.c_str());

...................................................................
标准C里没有string,char *==char []==string
可以用CString.Format("%s",char *)这个方法来将char *转成CString。要把CString转成char *,用操
作符(LPCSTR)CString就可以了。
cannot convert from 'const char *' to 'char *' 
const char *c=aa.c_str(); 
string.c_str()只能转换成const char *
西门子PLC新手必看:200SMART与1200/1500的MODBUS RTU通讯实战(附完整配置流程) 本文详细解析了西门子PLC中S7-200 SMART与S7-1200/1500之间实现MODBUS RTU通讯的完整实战流程。内容涵盖硬件接线、软件配置及程序编写,重点讲解了200SMART作为从站、1200/1500作为主站的典型架构,并提供了关键功能块的使用方法和常见问题排查技巧,帮助新手快速打通不同系列PLC间的数据交换。 阅读详情

相关推荐

MTK平台高效部署Qwen2.5大模型:从转换到推理全流程解析

本文详细解析了在联发科(MTK)NeuroPilot平台上高效部署Qwen2.5大模型的全流程。内容涵盖从环境搭建、模型转换、量化优化到编译部署与上机推理的完整步骤,重点分享了模型转换与模型运行的关键实践与避坑指南,旨在帮助开发者将大语言模型成功集成至移动及边缘设备。

zeta9的博客 378

CString,int,string,char*之间的转换

中说的 有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”\0“的字符串数组 2,c_str(),返回有”\0“的字符串数组 3,copy() .....................

congtiaotu6532的博客 165

自旋玻璃(spin glass)、自旋冰(spin ice)和量子自旋液体(quantum spin liquid)(之二)

具有相同电荷的电子相互排斥。结果,为了在极其拥挤的环境中相互超越,他们不得不改变自己的行为。剑桥大学和英国伯明翰大学于 2009 年 7 月发表的研究表明,电子可以通过量子隧穿从金属表面跳到相近位置的量子线上,这样做后,将分离成两个准粒子,命名为的自旋子和全子。Van den Brink、Khomskii 和 Sawatzky 在 1997-1998 年对轨道子进行了理论上的预测。在 2011 年 9 月发给出版商的论文中报告了它作为一个单独的准粒子的实验观察结果。

qq_32515081的博客 1万+

string、wstring、cstring、 char、 tchar、int、dword转换方法

<br />string、wstring、cstring、 char、 tchar、int、dword转换方法最近编程一直头痛这集中类型的转化,明知都可以转却总是记不住,不断的上网查来查去,在这里小结一下。以备以后方便使用,当然有些方法可能不是最新的,或者最简单的,但是对于自己已经了解的使用起来应该方便的多:1》string转wstringwstring s2ws(const string& s){ _bstr_t t = s.c_str(); wchar_t* pwchar = (wchar_t*)t;

冰雪八哥的专栏 1万+

ICCompiler II学习笔记(一)ICC II使用全流程 overview

学习笔记同步发布在我的个人网站上,欢迎来访查看。 个人学识有限,理解可能有误,仅供参考。 文章目录一、前言二、 ICC II 简介和 GUI2.1 Blocks 和 Design Libraries2.2 Objects2.3 Application Options三、Design Setup四、APR flow五、 课程主题:如何用 ICC II来实现最好的PPA 一、前言 现在的芯片都在追求一个极致的PPA 芯片的生成可以分为以下 5大步骤: Front-end Design:前端设计,最终产生

一名FPGA芯片设计爱好者的技术博客 2万+

Kylin-Desktop-V10-SP1-General-Release-2303-X86_64-海光版(hygon c86)安装与配置指南

本文提供了在国产海光C86处理器平台上安装与配置Kylin Desktop V10 SP1操作系统的详细指南。内容涵盖从下载专用镜像、制作启动盘、BIOS关键设置、磁盘分区方案,到系统安装后的驱动优化、必备软件安装及常见故障排除,旨在帮助用户顺利完成hygon c86平台的系统部署与优化。

tree的博客 1371

转 A2W、W2A、T2A、T2W 等宏

A2W、W2A、T2A、T2W 等宏 如果你觉得使用 WideCharToMultiByte,MultiByteToWideChar 等函数比较麻烦---众多的参数,缓冲区的分配与销毁等。那么可以使用 A2W、W2A、T2A、T2W 等宏来代替,它们对上面两个函数进行了封装。在使用这些宏之前,应该包含头文件 atlconv.h ,并在调用上述宏之前先调用 USES_CONVERSION 这个宏。

youzaicz的专栏 2584

【RT-DETR涨点改进】全网独家创新、细节涨点改进篇 | ICML 2024 | RT-DETR引入ICB交互式卷积模块和ASB自适应频谱模块,助力目标检测、异常检测有效涨点、含多种创新改进点

RT-DETR目标检测模型通过引入ICB和ASB模块实现性能提升。ICB模块采用多尺度卷积交互,有效捕获局部和长程依赖特征;ASB模块通过自适应频域滤波优化特征表示,降低噪声干扰。两者结合使模型在复杂场景中表现更优,显著提升检测精度和鲁棒性。文章详细介绍了模块原理、代码实现及配置方法,并提供了8种改进版本的YAML配置文件,适用于不同网络结构。这些创新改进为RT-DETR模型提供了高效涨点方案,特别适合复杂背景和高噪声环境下的目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 213

char 类型与lpcwstr_C++中char*转换为LPCWSTR的解决方案

前言大家在学习或者使用Windows编程中,经常会碰到字符串之间的转换,char*转LPCWSTR也是其中一个比较常见的转换。下面就列出几种比较常用的转换方法。大家可以根据自己的需求选择相对应的方法,下面来一起学习学习吧。1、通过MultiByteToWideChar函数转换MultiByteToWideChar函数是将多字节转换为宽字节的一个API函数,它的原型如下:int MultiByteT...

weixin_39886612的博客 3302

大模型_WIN10使用hyper-v安装Ubuntu24.04虚拟机_配置独立静态IP地址_连接外网_并与内网其他机器互通_通过容器安装Dify_超详细安装过程002--人工智能工作笔记0247

本文详细描述了在Hyper-V环境中配置网络、安装Ubuntu虚拟机、设置IP地址、安装Docker以及部署Dify应用的过程。首先,通过Hyper-V管理器创建外部虚拟交换机(ExternalSwitch),并配置本机、虚拟交换机和Ubuntu虚拟机的IP地址,确保网络互通。接着,在Ubuntu虚拟机中安装Open-VM-Tools和Docker,并配置Docker的国内镜像源。最后,通过Git克隆Dify源码,使用Docker Compose启动Dify应用,完成部署。整个过程涵盖了网络配置、虚拟机管理

添柴程序猿的专栏 1751

ESP32设备驱动-TM1637-驱动4位7段数码管

TM1637是一款带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成了MCU数字接口、数据锁存、LED高压驱动、键盘扫描等功能。 TM1637使用DIP20/SOP20封装,主要适用于电磁炉、微波炉、小家电的显示驱动。

视觉与物联智能 2118

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

ATL转换宏ATL:转换宏是各种字符编码之间进行转换的一种很方便的方式,在函数调用时,它们显得非常有用。为了使用这些宏,需要先包含atlconv.h头文件。ATL转换宏的名称是根据下面的模式来命名的[源类型]2[新类型]或者[源类型]2C[新类型]。据有第二种形式的名字的宏的转换结果是常量指针(对应名字中的"C")。各种类型的简称如下:A: MBCS string, char* (A for AN

坏特的专栏 1653

电磁场仿真软件:COMSOL Multiphysics_(17).时域与频域分析

时域和频域分析是电磁场仿真中非常重要的两种方法,每种方法都有其独特的应用场景和优势。时域分析适用于瞬态响应和宽带信号的分析,而频域分析则适用于稳态响应和窄带信号的分析。在COMSOL Multiphysics中,通过合理设置物理场接口、材料属性、边界条件、网格划分和求解器,可以高效地进行这两种分析,并通过傅里叶变换将时域结果转换为频域结果,进一步拓展仿真应用的范围。合理的性能优化措施,如网格划分优化和并行计算,可以显著提高仿真的效率和准确性。

kkchenjj的博客 1977

C/C++宽窄字符串转换及其注意事项(一)

今天在调试公司代码的时候,因为宽窄字符串转换问题引起程序崩溃,所以,趁此机会,把最近用到的方法总结一下。  一、ATL and MFC String Conversion Macros  1) ATL 7.0 字符串转换类和宏   ATL 7.0介绍了几种新的字符串转换类和宏,以下的宏有明显改善的地方。转换格式如下:  C(源字符串)2[C](目的字符串)[EX]  C:转换出来的目

チンポー的博客 3156

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换 (UNICODE版本字符串转换为Ansi版本)

http://blog.163.com/h_sc2011/blog/static/204543014201221905954582/  先mark,后续研究 一.CString与LPCWSTR 两者的不同:LPCWSTR 是Unicode字符串指针,初始化时串有多大,申请空间就有多大,以后存贮若超过则出现无法预料的结果,这是它与CString的不同之处。而CString

Greless的后花园 1136

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

谈ATL(一)--说说ATL字符串转换类

大家在使用ATL技术做项目时,一定发现了非常麻烦的字符串字符集问题,下面把常用点和重点记录罗列一下,以备查。ATL提供了许多字符串转换函数,如果编译选项使得源和目的的字符类型相同,那么这些类不执行任何转换,关于设置系统编译项的问题前面windows编程的文章中已经介绍过。如果要使用ATL的字符转换类,那么必须要包含<atlconv.h>文件,转换的具体方式均是通...

weixin_34393428的博客 266

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC++中的编码转换,多字节宽字节转换

转自:http://www.youranshare.com/blog/sid/35.html 在MFC中字串类是CString,std中是string、wstring,他们之间差别是内部包含的字符编   码   不一样,本文中介绍了几个微软的宏,可以轻松的对这几种字串进行转换.   ·    CString、CStringA,CStringW的关系 在MFC的工程

Barry的博客 3125

Win编程笔记:字符串小结

Win编程笔记:字符串小结 JasonLee@http://blog.csdn.net/jasonblog Basics ANSI和Unicode: 前者是单字节字符编码,用来表示英语以及一些西欧语言的所有字符;后者是双字节字符编码,可以表示现代计算机涉及的所有字符(包括中文、日文等)。 显然,使用Unicode更有利于国际化和本地化。除此之外,Windows所有核心函数...

java开发指南博客 【转载】 101

htm字符串生成器

因为程序是在Ubuntu上写的,如果在Windows上使用,需要略加改动。由于发现了更好的导出到Excel的方法,这个程序暂时不做windows版了。大家可以看《html字符串生成器源代码》。 先把要转化的.xls文件另存为.html文件,然后再用html字符串生成器转化。 为了实现C#导出到Excel,我选用了生成htm字符串的方式,用StringBuilder的方式,调用append...

weixin_34192993的博客 211

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的专栏 3675

c++ 操作Word

c++ 操作Word 2013-01-16 15:35 6602人阅读 评论(0) 收藏 举报 摘要: 使用VC编程来操纵Office。你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序......只要是O

douyaoxia的专栏 3494

[原创]windows和COM中的字符数据类型

      一直对VC中文本数据类型有很多疑惑,在用COM的时候,发现疑惑更大了,MS繁杂的字符数据类型,大概也从一个侧面反映了Windows历程的一点足迹和计算机在最近10几年的发展.今天抽个时间总结一下.以下大部分非本人原创,只是收集整理自《深入解析ATL》和《COM本质论》.希望能对这方面有疑惑的同学有帮助.说实话,我感觉掌握了这些,对掌握象VB,JAVA这些语言及其机制就非常容易了,因为他

匆匆 人生 1099

http://blog.csdn.net/wowolook/article/details/8509664

摘要: 未整理 使用VC编程来操纵Office。你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序......只要是Office能够实现的功能,都可以在你写的程序中调用。仔细阅读下面的说明,并下载源文件进行参考,你就可以

u010592652的博客 663
上一篇: UI交互细节-节选-控件使用细则
下一篇: 头文件交叉声明的解决办法
代码小兵
博客等级 码龄20年 19粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值