常用数据类型转换使用详解
CString_与其他类型的转换

一.VC常用数据类型列表二.常用数据类型转化2.1数学类型变量与字符串相互转换_ttoi(CString->int) _tstof(CString->double)2.2CString及string,char *与其他数据类型的转换和操作●CString,string,char*的综合比较●数学类型与CString相互转化●CString与char*相互转换举例●CString 与 BSTR 型转换●VARIANT 型转化成 CString 型2.3 BSTR、_bstr_t与CComBSTR2.4 VARIANT 、_variant_t 与 COleVariant附录CString及字符串转及操作详解参考书籍:CSDN,<<MFC深入浅出(Second Edit)>> 一.VC常用数据类型列表int iTyep=3;char *szChar;itoa(iType,szChar,2);cout<<szChar;//输出为1010类似函数列表:_CRTIMP char * __cdecl _itoa(int, char *, int);//为了完整性,也列在其中_CRTIMP char * __cdecl _ultoa(unsigned long, char *, int);_CRTIMP char * __cdecl _ltoa(long, char *, int);_CRTIMP char * __cdecl _i64toa(__int64, char *, int);_CRTIMP char * __cdecl _ui64toa(unsigned __int6 4, char *, int);_CRTIMP wchar_t * __cdecl _i64tow(__int64, wchar_t *, int);_CRTIMP wchar_t * __cdecl _ui64tow(unsigned __int64, wchar_t *, int);_CRTIMP wchar_t * __cdecl _itow (int, wc har_t *, int);//转换为长字符串类型_CRTIMP wchar_t * __cdecl _ltow (long, wchar_t *, int);_CR TIMP wchar_t * __cdecl _ultow (unsigned long, wchar_t *, int);还有很多,请自行研究(2)将字符串类型转换为数学类型变量可以用以下一些函数:举例: _CRTIMP int __cdecl atoi(co nst char *);//参数一看就很明了char *szChar=”88”;int temp(0);temp=atoi(szChar); cout<<temp;类似的函数列表:_CRTIMP int __cdecl atoi(const char *);_CRTIMP double __cd ecl atof(const char *);_CRTIMP long __cdecl atol(const char *);_CRTIMP long double __cdecl _atold(const char *);_CRTIMP __int64 __cdecl _atoi64(const char *);_CRTIMP double __cdecl s trtod(const char *, char **);//_CRTIMP long __cdecl strtol(const char *, char **, int);//_ CRTIMP long double __cdecl _strtold(const char *, char **);_CRTIMP unsigned long __cdecl str toul(const char *, char **, int);_CRTIMP double __cdecl wcstod(const wchar_t *, wchar_t **); //长字符串类型转换为数学类型_CRTIMP long __cdecl wcstol(const wchar_t *, wchar_t **, int); _CRTIMP unsigned long __cdecl wcstoul(const wchar_t *, wchar_t **, int);_CRTIMP int __cdecl _wtoi(const wchar_t *);_CRTIMP long __cdecl _wtol(const wchar_t *);_CRTIMP __int64 __cdecl _wtoi64(const wchar_t *);还有很多,请自行研究2.2.CString及string,char *与其他数据类型的转换和操作(1)CString,string,char*的综合比较(这部分CSDN上的作者joise的文章<< CString,string,char*的综合比较>>写的很详细,请大家在仔细阅读他的文章.地址: /joise/或参考附录:(2)转换:●数学类型与CString相互转化数学类型转化为CString可用Format函数,举例:CString s;int i = 64;s.Format("%d", i)CString转换为数学类型:举例CString strValue("1.234");double dblValue;dblValue = atof((LPCTSTR)strValue);●CString与char*相互转换举例CString strValue(“Hello”);char *szValue;szValue=strValue.GetBuffer(szValue);也可用(LPSTR)(LPCTSTR)对CString// 进行强制转换.szValue=(LPSTR)(LPCTSTR)strValue;反过来可直接赋值:char *szChar=NULL;CString strValue;szChar=new char[10];memset(szChar,0,10);strcpy(szChar,”Hello”);strValue=szChar;●CString 与 BSTR 型转换CString 型转化成 BSTR 型当我们使用 ActiveX 控件编程时,经常需要用到将某个值表示成 BSTR 类型.B STR 是一种记数字符串,Intel平台上的宽字符串(Unicode),并且可以包含嵌入的 NULL 字符。
表的读取与解析技巧

表的读取与解析技巧在数据处理和数据分析的领域中,表格是一种常见且重要的数据结构。
无论是在Excel、数据库还是在编程语言中创建的表格,掌握表的读取与解析技巧对于准确地获取和分析数据至关重要。
本文将介绍一些实用的表的读取与解析技巧,帮助您高效地处理表格数据。
一、读取表格数据读取表格数据是进行数据分析的第一步。
根据表格的不同形式和存储方式,我们可以采用多种方法进行数据读取:1. 在Excel中读取表格数据在Excel中读取表格数据是最常见的方法之一。
可以直接打开Excel 文件,然后选择想读取的工作表。
通过使用Excel提供的函数、筛选和排序功能,我们可以快速浏览和分析表格数据。
2. 使用数据库查询语言(SQL)读取表格数据如果数据存储在关系型数据库中,我们可以使用SQL语句来查询表格数据。
通过编写查询语句,我们可以选择特定的列、筛选特定的行,并对结果进行排序和聚合操作。
这样可以更精确地获取我们所需要的数据。
3. 使用编程语言读取表格数据当表格数据较大或需要进行复杂的数据处理时,使用编程语言可能更适合。
Python和R是两种常用的数据科学编程语言,它们提供了丰富的库和函数来读取和处理表格数据。
通过使用pandas库(Python)或者tidyverse包(R),我们可以轻松地将表格数据加载到内存中,并进行各种操作和分析。
二、解析表格数据在读取表格数据后,我们需要解析数据以便更好地理解和分析。
以下是一些常用的解析表格数据的技巧:1. 数据清洗与预处理表格数据通常需要进行清洗和预处理,以便去除无用信息、填充缺失值、处理异常值等。
我们可以使用数据处理工具或编程语言提供的函数来实现这些操作。
例如,使用Excel的筛选功能,我们可以快速选择和删除表格中的无用数据;使用Python中的pandas库,我们可以使用dropna()函数来删除包含缺失值的行或列。
2. 列与行操作在解析表格数据时,我们经常需要对表格的列和行进行操作。
少儿编程Scratch课程课件---变量---变量详解

数字类型
少儿趣味编程 - Scratch
3 Part
变量的概念
什么是变量
变量对所有的编程语言 来说都是非常重要的
什么是变量
专业地讲,变量是被命名的计算机内存区域。 Scratch中用变量来记录可变值。变量一次只能保存一个值,这些值可以是数字或字 符串(任何文本)。 Scratch中的变量必须在项目运行之前创建,这样的好处是可以使用少量的RAM用 于存储项目实际运行时使用的值。 可以把变量想象成一个盒子,程序随时都能存放盒子中的数据(数字和文本)。
少儿趣味编程 - Scratch
2 Part
数据类型
三种数据类型
Scratch支持三种数据类型:
布尔类型:仅有两个值;真或假,即True或False。用于测试一个或多个条件,从而 让程序选择不同的执行路径。 数字类型:可以是整数或小数。可以使用数字和逻辑运算模块的“将···四舍五入” 积木、向上\向下取整函数把小数转变为整数。 字符串类型:是一系列字符的集合。字符可以是字母(大小写均可)、数字(0-9), 以及能在键盘上输出的符号(+、-、&、@等)。字符串可以存储姓名、地址、图 书标题等。
少儿趣味编程 - Scratch
变量 - 变量详解
Part 1 Part 2 Part 3 Part 4 Part 5
学习目标 数据类型 变量的概念 实践与思考 课后练习
C 目录 ontents
少儿趣味编程 - Scratch
1 Part
学习目标
学习目标
掌握数据类型 掌握数据类型的转换 掌握变量的概念
常用的圆角矩形的功能积木(如“x坐标”、“y坐标”、“方向”、“造型编号”、 “大小”、“音量”、“节奏”等)得到的都是数字类型,可以拖动到数字凹槽。 个别圆角矩形的功能积木(如侦测模块中的“回答”积木,或是数字和逻辑运算模 块中的“连接”积木)既可以返回数字类型,也能返回字符串类型的数据。当把它 拖动到数字凹槽时,Scratch会自动转换数据类型。
BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字。。。

BigDecimal的⽤法详解(保留两位⼩数,四舍五⼊,数字格式化,科学计数法转数字,数字。
转⾃:⼀、简介Java在java.math包中提供的API类BigDecimal,⽤来对超过16位有效位的数进⾏精确的运算。
双精度浮点型变量double可以处理16位有效数。
在实际应⽤中,需要对更⼤或者更⼩的数进⾏运算和处理。
float和double只能⽤来做科学计算或者是⼯程计算,在商业计算中要⽤java.math.BigDecimal。
BigDecimal所创建的是对象,我们不能使⽤传统的+、-、*、/等算术运算符直接对其对象进⾏数学运算,⽽必须调⽤其相对应的⽅法。
⽅法中的参数也必须是BigDecimal的对象。
构造器是类的特殊⽅法,专门⽤来创建对象,特别是带有参数的对象。
⼆、构造器描述BigDecimal(int) 创建⼀个具有参数所指定整数值的对象。
BigDecimal(double) 创建⼀个具有参数所指定双精度值的对象。
BigDecimal(long) 创建⼀个具有参数所指定长整数值的对象。
BigDecimal(String) 创建⼀个具有参数所指定以字符串表⽰的数值的对象。
三、⽅法描述add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。
toString() 将BigDecimal对象的数值转换成字符串。
doubleValue() 将BigDecimal对象中的值以双精度数返回。
floatValue() 将BigDecimal对象中的值以单精度数返回。
longValue() 将BigDecimal对象中的值以长整数返回。
wpf converter参数

wpf converter参数WPF Converter参数详解在WPF(Windows Presentation Foundation)中,Converter (转换器)是一种非常常用的工具,它用于在XAML中对数据进行转换和格式化,以实现更好的数据展示效果。
在本文中,我们将详细介绍WPF Converter的参数及其使用方法,帮助读者更好地理解和使用这一功能。
一、什么是ConverterConverter是WPF中的一种特殊类,它实现了IValueConverter 接口,并通过实现其中的Convert和ConvertBack方法来完成数据的转换。
Convert方法用于将绑定的源数据转换为目标数据,而ConvertBack方法则用于将目标数据转换回源数据。
二、Converter的参数在WPF中,Converter的参数可以通过ConverterParameter属性进行设置。
该属性的类型为object,因此我们可以将任何类型的数据作为参数传递给Converter。
在使用ConverterParameter属性时,我们可以直接在XAML中设置参数的值,也可以通过绑定的方式动态设置参数。
三、如何使用Converter参数1. 直接在XAML中设置参数的值在XAML中使用Converter时,可以通过在ConverterParameter 属性中直接设置参数的值。
例如,我们有一个Converter用于将数字转换为对应的颜色,而这个颜色是由参数指定的,我们可以这样写:```xml<Window.Resources><local:ColorConverter x:Key="colorConverter" /></Window.Resources><TextBlock Text="123" Foreground="{Binding Path=Value, Converter={StaticResource colorConverter}, ConverterParameter=Red}" />```在这个例子中,我们将ConverterParameter设置为Red,表示将数字转换为红色。
listbymap用法

listbymap用法ListByMap用法详解ListByMap是一种常用的Java集合类,它可以将Map中的键值对转换为List中的元素。
在实际开发中,我们经常需要将Map中的数据转换为List,以便于进行排序、过滤、分页等操作。
ListByMap 就是为了解决这个问题而设计的。
ListByMap的使用方法非常简单,只需要调用它的静态方法listByMap即可。
该方法接受一个Map类型的参数,返回一个List 类型的结果。
下面是一个简单的示例:```Map<String, Integer> map = new HashMap<>();map.put("apple", 10);map.put("banana", 20);map.put("orange", 30);List<Map.Entry<String, Integer>> list = ListByMap.listByMap(map); ```上面的代码中,我们创建了一个Map对象,并向其中添加了三个键值对。
然后调用ListByMap的listByMap方法,将Map对象转换为List对象。
最终得到的List对象中包含了三个Map.Entry类型的元素,每个元素表示一个键值对。
ListByMap的返回结果是一个List<Map.Entry<K, V>>类型的对象,其中K表示键的类型,V表示值的类型。
List中的元素是按照Map 中的键值对顺序排列的。
如果需要按照值的大小进行排序,可以使用Collections.sort方法进行排序。
ListByMap还支持过滤操作。
可以通过传递一个Predicate对象来过滤List中的元素。
下面是一个示例:```Map<String, Integer> map = new HashMap<>();map.put("apple", 10);map.put("banana", 20);map.put("orange", 30);List<Map.Entry<String, Integer>> list = ListByMap.listByMap(map, entry -> entry.getValue() > 15);```上面的代码中,我们创建了一个Map对象,并向其中添加了三个键值对。
java字符串转bufferedreader方法
《Java 字符串转 BufferedReader 方法详解》在Java编程中,字符串和缓冲读取器(BufferedReader)是两个常用的数据类型。
而将字符串转换为缓冲读取器是一项常见的操作,本文将深入探讨这一转换方法。
一、背景介绍1.1 字符串和缓冲读取器在Java中,字符串是一种不可变的数据类型,用于存储文本数据。
而缓冲读取器是用于读取文本数据的类,其提供了一些便捷的方法来读取字符、字符串和行。
在实际开发中,我们经常需要从字符串转换为缓冲读取器,以便对文本进行逐行读取或其他操作。
1.2 转换方法的重要性字符串到缓冲读取器的转换是Java编程中的常见需求,尤其是在处理文件读取、网络通信等方面。
了解并掌握这一转换方法对于编程人员非常重要。
二、转换方法探讨2.1 使用StringReader和BufferedReader在Java中,可以使用StringReader和BufferedReader两个类来实现字符串到缓冲读取器的转换。
我们需要将字符串包装成StringReader对象,然后再将StringReader对象包装成BufferedReader对象。
这样就可以将字符串转换为缓冲读取器,实现对文本的逐行读取等操作。
2.2 转换示例下面是一个简单的示例代码,演示了如何将字符串转换为缓冲读取器:```javaString s = "Hello, world!\nThis is a test.";StringReader stringReader = new StringReader(s); BufferedReader bufferedReader = newBufferedReader(stringReader);```通过上述代码,我们成功将字符串s转换为缓冲读取器bufferedReader,从而可以使用bufferedReader来逐行读取字符串内容。
2.3 转换方法的灵活性除了上述的基本转换方法外,Java还提供了一些其他的转换方式,比如使用InputStream、FileReader等。
str 用法
str 用法STR 用法详解在计算机编程中,字符串(string)是一种非常重要和基本的数据类型,它由一串字符组成,可以用来存储文本、数字和其他数据。
在 Python这门编程语言中,字符串的表现形式为 str 类型。
在本文中,我们将详细介绍 str 在 Python 中的用法。
一、字符串的表示方法在Python 中,字符串可以用单引号(' )或双引号(" )表示。
例如:str1 = 'hello'str2 = "world"如果需要在字符串中包含单引号或双引号,可以使用转义字符( \ )来表示。
例如:str3 = 'I\'m a student.'str4 = "She said, \"Hello.\""同时,Python 也提供了三重引号( ''' 或 """ )来表示多行字符串。
例如:str5 = '''Hello,World!'''二、字符串的常用方法1. 字符串的拼接字符串拼接可以使用 + 或 * 运算符。
例如:str1 = 'hello'str2 = 'world'str3 = str1 + str2str4 = str1 * 32. 字符串的切片字符串切片可以用于取出字符串中的部分内容,其格式为:[start: end: step]。
其中,start 表示起始位置,如果不指定,默认为0;end 表示结束位置,如果不指定,默认为字符串的长度;step 表示步长,表示取值时每隔几个字符取一个。
例如:str1 = 'Hello, World!'print(str1[7:12]) # 输出 Worldprint(str1[::2]) # 输出 Hlo ol!3. 字符串的查找字符串的查找可以使用 find()、index() 和 count() 方法。
最常用的15个Excel高级函数使用方法详解
可选参数,指定查找方式,默认为近似匹配。
示例
=HLOOKUP(A2, B1:C3, 2, FALSE)
INDEX和MATCH函数
• 功能:INDEX函数返回指定单元格或单元格数组中的值;MATCH函数返回指定值在数组中的 相对位置。
INDEX和MATCH函数
语法 01
01 语法
02 SUMIF(range, criteria, [sum_range])
02 SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)
SUMIF和SUMIFS函数
range
要应用条件的单元格区域。
学员们纷纷表示将会把学到的知识和技能应用到实际工作中,并期待更多类似的培训课程
下一步学习计划和目标设定
深入学习Excel其他高级功 能,如数据透视表、条件 格式、宏等
定期回顾和巩固所学知识 ,不断提高自己的Excel应 用水平
结合实际工作需求,探索 更多Excel高级函数的应用 场景和技巧
THANKS
通过实例演示了每个函数的使 用方法,包括函数语法、参数 说明、使用场景等
讲解了如何结合多个函数实现 复杂的数据处理和分析任务
学员心得体会分享交流环节
学员表示通过本次课程深入了解了Excel高级函数的使用方法,对于提高工作效率非常有帮 助
有学员分享了自己在实际工作中应用Excel高级函数的经验,如使用VLOOKUP函数进行数 据匹配和查找,使用IFERROR函数处理错误值等
">100")
COUNTIF和COUNTIFS函数
json.stringify原理 -回复
json.stringify原理-回复JSON.stringify原理及用法详解JSON.stringify是JavaScript中一个非常常用的方法,用于将一个JSON 对象转换为字符串。
该方法生成的字符串可以被服务器接收并解析,也可以被其他客户端程序进行传输和解析。
本文将详细解析JSON.stringify的原理及用法。
1. 什么是JSON在深入了解JSON.stringify之前,我们先要了解什么是JSON(JavaScript Object Notation)。
JSON是一种轻量级的数据交换格式,具有简洁清晰的结构,易于阅读和编写。
它常被用于前后端数据交互、配置文件等场景。
JSON的数据格式类似于JavaScript中的对象和数组,主要由键值对组成,键必须是字符串,值可以是字符串、数字、布尔、数组、对象或null等类型。
JSON的具体格式如下:{"key1": "value1","key2": "value2","key3": {"subkey": "subvalue"},"key4": ["item1", "item2"]}2. JSON.stringify的作用及用法JSON.stringify方法用于将一个JavaScript对象转换为一个JSON字符串。
它接受三个参数:value、replacer和space。
- value:要被转换为字符串的JavaScript对象。
- replacer(可选):用于控制转换过程的函数或数组。
可以过滤和转换对象的属性。
- space(可选):用于控制格式化输出的缩进空格数,或者指定一个字符串,用于缩进每个级别的输出。
下面是一个示例,展示了JSON.stringify的基本用法:javascriptconst obj = { name: "John", age: 30, city: "New York" };const jsonString = JSON.stringify(obj);console.log(jsonString);输出:{"name":"John","age":30,"city":"New York"}3. JSON.stringify的原理解析JSON.stringify的执行过程可以分为两个主要步骤:3.1 序列化序列化是将JavaScript对象转换为字符串的过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC常用数据类型使用转换详解CString ,BSTR ,LPCTSTR之间关系和区别CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。
CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。
typedef OLECHAR FAR* BSTR;typedef const char * LPCTSTR;vc++中各种字符串的表示法首先char* 是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。
LP的含义是长指针(long pointer)。
LPSTR是一个指向以‘/0’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。
而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。
1.LP表示长指针,在win16下有长指针(LP)和短指针(P)的区别,而在win32下是没有区别的,都是32位.所以这里的LP和P是等价的.2.C表示const3.T是什么东西呢,我们知道TCHAR在采用Unicode方式编译时是wchar_t,在普通时编译成char.为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。
LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。
然后为了实现两种编码的通用,提出了TCHAR的定义:如果定义_UNICODE,声明如下:typedef wchar_t TCHAR;如果没有定义_UNICODE,则声明如下:typedef char TCHAR;LPTSTR和LPCTSTR中的含义就是每个字符是这样的TCHAR。
CString类中的字符就是被声明为TCHAR类型的,它提供了一个封装好的类供用户方便地使用。
LPCTSTR:#ifdef _UNICODEtypedef const wchar_t * LPCTSTR;#elsetypedef const char * LPCTSTR;#endifVC常用数据类型使用转换详解先定义一些常见类型变量借以说明int i = 100;long l = 2001;float f=300.2;double d=12345.119;char username[]="女侠程佩君";char temp[200];char *buf;CString str;_variant_t v1;_bstr_t v2;一、其它数据类型转换为字符串短整型(int)itoa(i,temp,10); //将i转换为字符串放入temp中,最后一个数字表示十进制 itoa(i,temp,2); //按二进制方式转换长整型(long)ltoa(l,temp,10);二、从其它包含字符串的变量中获取指向该字符串的指针CString变量str = "2008北京奥运";buf = (LPSTR)(LPCTSTR)str;BSTR类型的_variant_t变量v1 = (_bstr_t)"程序员";buf = _com_util::ConvertBSTRToString((_bstr_t)v1);三、字符串转换为其它数据类型strcpy(temp,"123");短整型(int)i = atoi(temp);长整型(long)l = atol(temp);浮点(double)d = atof(temp);四、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:整数(int)str.Format("%d",i);浮点数(float)str.Format("%f",i);字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值str = username;五、BSTR、_bstr_t与CComBSTRCComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。
char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR("数据"); //使用前需要加上头文件comutil.h反之可以使用char *p=_com_util::ConvertBSTRToString(b);六、VARIANT 、_variant_t 与 COleVariantVARIANT的结构可以参考头文件VC98/Include/OAIDL.H中关于结构体tagVARIANT的定义。
对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:VARIANT va;int a=2001;va.vt=VT_I4; //指明整型数据va.lVal=a; //赋值对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:unsigned char bVal; VT_UI1short iVal; VT_I2long lVal; VT_I4float fltVal; VT_R4double dblVal; VT_R8VARIANT_BOOL boolVal; VT_BOOLSCODE scode; VT_ERRORCY cyVal; VT_CYDATE date; VT_DATEBSTR bstrVal; VT_BSTRIUnknown FAR* punkVal; VT_UNKNOWNIDispatch FAR* pdispVal; VT_DISPATCHSAFEARRAY FAR* parray; VT_ARRAY|*unsigned char FAR* pbVal; VT_BYREF|VT_UI1short FAR* piVal; VT_BYREF|VT_I2long FAR* plVal; VT_BYREF|VT_I4float FAR* pfltVal; VT_BYREF|VT_R4double FAR* pdblVal; VT_BYREF|VT_R8VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOLSCODE FAR* pscode; VT_BYREF|VT_ERRORCY FAR* pcyVal; VT_BYREF|VT_CYDATE FAR* pdate; VT_BYREF|VT_DATEBSTR FAR* pbstrVal; VT_BYREF|VT_BSTRIUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWNIDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCHSAFEARRAY FAR* FAR* pparray; VT_ARRAY|*VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANTvoid FAR* byref; VT_BYREF_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
例如:long l=222;ing i=100;_variant_t lVal(l);lVal = (long)i;COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:COleVariant v3 = "字符串", v4 = (long)1999;CString str =(BSTR)v3.pbstrVal;long i = v4.lVal;七、其它对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如:LPARAM lParam;WORD loValue = LOWORD(lParam); //取低16位WORD hiValue = HIWORD(lParam); //取高16位对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如: WORD wValue;BYTE loValue = LOBYTE(wValue); //取低8位BYTE hiValue = HIBYTE(wValue); //取高8位如何将CString类型的变量赋给char*类型的变量1、GetBuffer函数:使用CString::GetBuffer函数。
char *p;CString str="hello";p=str.GetBuffer(str.GetLength());str.ReleaseBuffer();将CString转换成char * 时CString str("aaaaaaa");strcpy(str.GetBuffer(10),"aa");str.ReleaseBuffer();当我们需要字符数组时调用GetBuffer(int n),其中n为我们需要的字符数组的长度.使用完成后一定要马上调用ReleaseBuffer();还有很重要的一点就是,在能使用const char *的地方,就不要使用char *2、memcpy:CString mCS=_T("cxl");char mch[20];memcpy(mch,mCS,20);3、用LPCTSTR强制转换:尽量不使用char *ch;CString str;ch=(LPSTR)(LPCTSTR)str;CString str = "good";char *tmp;sprintf(tmp,"%s",(LPTSTR)(LPCTSTR)str);4、CString Msg;Msg=Msg+"abc";LPTSTR lpsz;lpsz = new TCHAR[Msg.GetLength()+1];_tcscpy(lpsz, Msg);char * psz;strcpy(psz,lpsz);CString类向const char *转换char a[100];CString str("aaaaaa");strncpy(a,(LPCTSTR)str,sizeof(a));或者如下:strncpy(a,str,sizeof(a));以上两种用法都是正确地. 因为strncpy的第二个参数类型为const char *.所以编译器会自动将CString类转换成const char *.CString转LPCTSTR (const char *)CString cStr;const char *lpctStr=(LPCTSTR)cStr;LPCTSTR转CStringLPCTSTR lpctStr;CString cStr=lpctStr;将char*类型的变量赋给CString型的变量可以直接赋值,如:CString myString = "This is a test";也可以利用构造函数,如:CString s1("Tom");将CString类型的变量赋给char []类型(字符串)的变量1、sprintf()函数CString str = "good";char tmp[200] ;sprintf(tmp, "%s",(LPCSTR)str);(LPCSTR)str这种强制转换相当于(LPTSTR)(LPCTSTR)strCString类的变量需要转换为(char*)的时,使用(LPTSTR)(LPCTSTR)str然而,LPCTSTR是const char *,也就是说,得到的字符串是不可写的!将其强制转换成LPTSTR 去掉const,是极为危险的!一不留神就会完蛋!要得到char *,应该用GetBuffer()或GetBufferSetLength(),用完后再调用ReleaseBuffer()。