VC常见数据类型转换详解
c语言类型转换优先级
c语言类型转换优先级C语言中的类型转换是指将一个数据的类型转换为另一个数据类型的过程。
在表达式中使用不同数据类型的操作数会触发类型转换。
类型转换的目的是为了保证表达式的正确性和一致性,确保操作数之间的相互兼容性以及避免精度损失。
C语言中的类型转换遵循一定的优先级规则,优先级由高到低依次为:1. 强制类型转换:通过强制类型转换符(类型名)将一个表达式的值强制转换为指定的类型。
强制类型转换优先级最高,也是最明确的一种类型转换方式。
例如:cint num1 = 10;float num2 = (float)num1; 将整型的num1强制转换为浮点型2. 隐式类型转换:也称为自动类型转换或默认类型转换,指的是程序自动为我们进行的类型转换。
隐式类型转换的优先级高于算术类型转换和赋值类型转换,但低于强制类型转换。
例如:cint num1 = 10;float num2 = num1; 将整型的num1隐式转换为浮点型3. 算术类型转换:指的是对算术操作符中操作数的类型进行自动转换,使其相互兼容。
包括整型提升和浮点型提升。
例如:cint num1 = 10;float num2 = 3.14;double result = num1 + num2; 整型提升和浮点型提升4. 赋值类型转换:指的是将一个表达式的值赋给另一个不同类型的变量时进行的类型转换。
赋值类型转换的优先级最低。
例如:cint num1 = 10;float num2 = 3.14;num1 = num2; 将浮点型num2赋值给整型num1,进行了赋值类型转换在进行类型转换时,C语言会遵循一定的规则和规定,如下所示:1. 整型提升:当两个操作数的类型不同时,C语言会将较低的数据类型转换为较高的数据类型。
整型提升的优先级高于浮点型提升。
例如:cchar c = 'A';int num = 10;int result = c + num; char类型先被转换为int类型再相加2. 浮点型提升:当一个操作数为整型,另一个操作数为浮点型时,C语言会将整型转换为浮点型。
c语言不同数据类型间的混合运算转换规则+常见数据类型
c语言不同数据类型间的混合运算转换规则+常见数据类型C语言中,不同数据类型之间的混合运算会按照一定的规则进行自动转换,具体规则如下:1. 整数和浮点数运算:- 如果一个操作数是浮点数,那么另一个操作数也会被转换为浮点数,然后进行运算。
- 如果一个操作数是整数,而另一个操作数是浮点数,那么整数会自动转换为浮点数,然后进行运算。
2. 整数之间的运算:- 如果两个操作数的类型相同,那么不需要进行任何转换,直接进行运算。
- 如果两个操作数的类型不同,那么会将较低精度的操作数自动提升为较高精度的类型,然后再进行运算。
常见的C语言数据类型包括:1. 整数类型:- char:1字节,有符号或无符号的整数。
- short:2字节,有符号或无符号的短整数。
- int:2或4字节,有符号或无符号的整数。
在不同系统中,其长度可能会有所不同。
- long:4或8字节,有符号或无符号的长整数。
在不同系统中,其长度可能会有所不同。
2. 浮点数类型:- float:4字节,单精度浮点数。
- double:8字节,双精度浮点数。
- long double:8字节以上,长双精度浮点数。
3. 其他类型:- void:空类型,用于标识无返回值或不可具体化的函数。
- bool(C99标准引入):用于表示布尔值,取值为true或false。
- 数组类型、指针类型、结构体类型、枚举类型等。
需要注意的是,在进行混合运算时,应尽量避免不必要的类型转换,以免影响程序的可读性和正确性。
同时,对于可能引起精度丢失的情况(如整数与浮点数之间的运算),需注意选择合适的数据类型和进行必要的类型转换。
c语言类型转换优先级
c语言类型转换优先级C语言中的类型转换有一定的优先级规则,以下是常见的类型转换优先级从高到低的顺序:1. 强制类型转换(Type Casting),强制类型转换具有最高的优先级,可以通过将表达式或变量强制转换为指定类型来改变其数据类型。
例如,`(int) 3.14` 将浮点数转换为整数。
2. 算术类型转换(Arithmetic Type Conversion):当不同类型的算术运算符(如加法、减法、乘法等)作用于不同类型的操作数时,会进行隐式的类型转换以保证操作数具有相同的类型。
转换规则如下:如果操作数中至少有一个是 long double 类型,则将另一个操作数转换为 long double 类型。
如果操作数中至少有一个是 double 类型,则将另一个操作数转换为 double 类型。
如果操作数中至少有一个是 float 类型,则将另一个操作数转换为 float 类型。
如果操作数中至少有一个是 unsigned long 类型,则将另一个操作数转换为 unsigned long 类型。
如果操作数中至少有一个是 long 类型,则将另一个操作数转换为 long 类型。
如果操作数中至少有一个是 unsigned int 类型,则将另一个操作数转换为 unsigned int 类型。
如果操作数中至少有一个是 int 类型,则将另一个操作数转换为 int 类型。
如果操作数中至少有一个是 char 类型,则将另一个操作数转换为 int 类型。
3. 自动类型转换(Implicit Type Conversion),在某些情况下,C语言会自动进行类型转换,以保证表达式的类型匹配。
例如,将整数赋值给浮点数变量时,会自动将整数转换为浮点数类型。
4. 指针类型转换(Pointer Type Conversion),指针类型转换用于将一个指针转换为另一个类型的指针。
例如,将一个 `int` 类型的指针转换为 `char` 类型的指针。
vc常用数据及其转换
一、常用数据类型列表VC常用数据类型列表(1)VC常用数据类型列表(2)VC常用数据类型列表(3)同时,为了统一变量的命名,在Windows中,不同类型的变量拥有各自的标准前缀,一般情况如表所示。
不同数据类型的前缀前缀数据类型c 字符(char)s 短整数(short)cb 用于定义对象(一般为一个结构)尺寸的整数n 整数(integer)sz 以'\0'结尾的字符串b 字节f BOOLw 字(WORD,无符号短整数)l 长整数(LONG)h HANDLE(无符号整数)m_ 类成员变量fn 函数(function)dw 双字(DWORD,无符号长整数)二、数据类型转换:刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。
我们先定义一些常见类型变量借以说明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位指针。
VC类型格式转换
项目中经常用到各种不同的语言的朋友们应该会比较有这样的体会:一种开发语言用了比较长的时间,突然间转到另外一种语言的话,不管是数据类型或者语法结构,多多少少都会有那么一点不适应。
哪怕MFC中的类型与标准C++也是一样的。
下面是MFC/C++/C中字符类型CString, int, string, char*之间的转换的说明与举例,经常用的东西,相信对于用C/C++的朋友,还是比较有用的。
1、CString,int,string,char*之间的转换string转CStringCString.format("%s", string.c_str());char转CStringCString.format("%s", char*);char转stringstring s(char *);string转char *char *p = string.c_str();// CString转std::stringCStringstr = dlg.GetPathName(); setlocale(LC_ALL, "chs");char *p = new char[256];wcstombs( p, str, 256 );m_fileName = p;1,string ->CStringCString.format("%s", string.c_str());用c_str()确实比data()要好. 2,char -> stringstring s(char *);你的只能初始化,在不是初始化的地方最好还是用assign(). 3,CString -> string string s(CString.GetBuffer()); GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.《C++标准函数库》中说的有三个函数可以将字符串的内容转换为字符数组和C—string1.data(),返回没有“\0”的字符串数组2,c_str(),返回有“\0”的字符串数组3,copy()CString互转int将字符转换为整数,可以使用atoi、_atoi64或atol。
c语言不同类型数据间的转换与运算
c语言不同类型数据间的转换与运算
C语言中不同类型的数据可以进行转换,但需要注意数据精度的损失和溢出问题。
以下是数据类型间的转换及其运算:
1. 整型转浮点型:整型可以直接转换为浮点型,即将整数值转换为浮点数值,例如将int类型变量a转换为float类型的变量b,可以使用如下语句:
float b = (float)a; 强制类型转换
2. 浮点型转整型:浮点型转换为整型需要注意精度的损失和溢出问题,可以使用强制类型转换方式或者使用取舍方法进行转换:
int a = (int)3.14f; 强制类型转换,a的值为3
int b = (int)(-3.14f); 强制类型转换,b的值为-3
int c = (int)(3.14f + 0.5f); 取舍方法转换,c的值为3
int d = (int)(-3.14f - 0.5f); 取舍方法转换,d的值为-3
3. 字符类型转换:字符类型可以转换为整型和浮点型,例如将char类型变量c 转换为int类型的变量a,可以使用如下语句:
char c = 'A';
int a = (int)c; 强制类型转换,a的值为65
4. 数组类型转换:可以使用指针类型进行数组间的转换,例如将int类型的数组a转换为float类型的数组b,可以使用如下语句:
int a[3] = {1, 2, 3};
float *b = (float *)a; 强制类型转换,b指向a的首地址
5. 布尔类型转换:布尔类型不可以直接强制类型转换为整型或浮点型,但是可以使用True和False来表示0和1,例如:
bool flag = true;
int a = flag; a的值为1。
c语言数据类型转换规则
c语言数据类型转换规则数据类型转换是计算机程序开发中必不可少的一个环节。
C语言作为一种底层语言,数据类型转换的规则极为严格,必须遵守一定的规范才能保证程序的正确性和稳定性。
本文将介绍C 语言数据类型转换的规则和注意事项,帮助程序员更好地处理数据类型。
C语言数据类型转换的规则:1. 隐式类型转换:当将一种数据类型赋值给另一种类型时,编译器会自动进行类型转换,这种类型转换称为隐式类型转换。
例如整型赋值给浮点型,字符型赋值给整型等。
2. 显式类型转换:当需要进行一种复杂的数据类型转换时,需要使用强制类型转换运算符,这种类型转换称为显式类型转换。
强制类型转换运算符包括:(1)(char)(2)(int)(3)(float)(4)(double)(5)(long)注意事项:1. C语言在进行数据类型转换时,有时会出现数据丢失的情况,例如将一个int类型赋值给char类型时,如果int类型的值大于127或小于-128,则会造成数据丢失。
因此,在进行数据类型转换时,需要确保不会发生数据丢失的情况。
2. 在进行整型和浮点型之间的转换时,需要注意精度问题。
在将一个浮点型转换成整型时会丢失小数部分,而在将一个整型转换成浮点型时会增加小数部分,因此需要考虑到精度的问题。
3. 在进行字符串和其他数据类型之间的转换时,需要使用标准库函数,例如atoi()函数将字符串转换成整型,atof()函数将字符串转换成浮点型等。
同时需要注意字符串长度的限制,防止缓冲区溢出。
4. C语言中可以使用强制类型转换运算符来进行数据类型转换,但是需要注意该运算符可能会造成数据丢失。
因此,在进行强制类型转换时需要慎重考虑,避免出现程序崩溃等问题。
总之,C语言数据类型转换规则虽然复杂,但是只要遵守相关规范并注意细节,就能够轻松完成各种数据类型转换操作。
同时,程序员在使用强制类型转换时需要慎重考虑,避免产生不必要的程序错误。
C语言数据类型转换(自动类型转换强制类型转换)
C语言数据类型转换(自动类型转换强制类型转换)数据类型转换就是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型。
自动类型转换自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生。
1) 将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换,例如:float f = 100;100 是 int 类型的数据,需要先转换为 float 类型才能赋值给变量f。
再如:int n = f;f 是 float 类型的数据,需要先转换为 int 类型才能赋值给变量 n。
在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型转换为左边变量的类型,这可能会导致数据失真,或者精度降低;所以说,自动类型转换并不一定是安全的。
对于不安全的类型转换,编译器一般会给出警告。
2) 在不同类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再进行计算。
转换的规则如下:•转换按数据长度增加的方向进行,以保证数值不失真,或者精度不降低。
例如,int 和long 参与运算时,先把int 类型的数据转成long 类型后再进行运算。
•所有的浮点运算都是以双精度进行的,即使运算中只有 float 类型,也要先转换为 double 类型,才能进行运算。
•char 和 short 参与运算时,必须先转换成 int 类型。
下图对这种转换规则进行了更加形象地描述:unsigned 也即 unsigned int,此时可以省略 int,只写 unsigned。
自动类型转换示例:复制纯文本复制1.#include<stdio.h>2.int main(){3.float PI = 3.14159;4.int s1, r = 5;5.double s2;6.s1 = r * r * PI;7.s2 = r * r * PI;8.printf('s1=%d, s2=%f\n', s1, s2);9.10.return 0;11.}#include<stdio.h> int main(){ float PI = 3.14159; int s1, r = 5; double s2; s1 = r * r * PI; s2 = r * r * PI; printf('s1=%d, s2=%f\n', s1, s2); return 0; }运行结果:s1=78, s2=78.539749在计算表达式r*r*PI时,r 和 PI 都被转换成 double 类型,表达式的结果也是 double 类型。
VC++中数据类型转换大全
vc数据类型转换大全(转载)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);浮点数(float,double)用fcvt可以完成转换,这是MSDN中的例子:int decimal, sign;char *buffer;double source = 3.1415926535;buffer = _fcvt( source, 7, &decimal, &sign );运行结果:source: 3.1415926535 buffer: ‘31415927′ decimal: 1 sign: 0decimal表示小数点的位置,sign表示符号:0为正数,1为负数CString变量str = “2008北京奥运”;buf = (LPSTR)(LPCTSTR)str; //这个因为buf是个char*变量先把CString 变量转换为const char*类型的再变为char*类型的上面的CString转换为char*型号的必须经过两次反之的直接赋值就可以BSTR变量BSTR bstrValue = ::SysAllocStri ng(L”程序员”);char * buf = _com_util::ConvertBSTRToString(bstrValue); SysFreeString(bstrValue);一定注意凡是定义的指针变量一定要用delete显示删除AfxMessageBox(buf);delete(buf);CComBSTR变量CComBSTR bstrVar(”test”);char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str); AfxMessageBox(buf);delete(buf);_bstr_t变量_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用_bstr_t bstrVar(”test”);const char *buf = bstrVar;///不要修改buf中的内容_bstr_t实际上是个字符指针型的AfxMessageBox(buf);通用方法(针对非COM数据类型)用sprintf完成转换char buffer[200];char c = ‘1′;int i = 35;long j = 1000;float f = 1.7320534f;sprintf( buffer, “%c”,c);sprintf( buffer, “%d”,i);sprintf( buffer, “%d”,j);sprintf( buffer, “%f”,f);二、字符串转换为其它数据类型strcpy(temp,”123″);短整型(int)i = atoi(temp);长整型(long)l = atol(temp);浮点(double)d = atof(temp);CString变量CString name = temp;BSTR变量BSTR bstrValue = ::SysAllocString(L”程序员”);…///完成对bstrValue的使用SysFreeString(bstrValue);CComBSTR变量CComBSTR类型变量可以直接赋值CComBSTR bstrVar1(”test”);CComBSTR bstrVar2(temp);_bstr_t变量_bstr_t类型的变量可以直接赋值_bstr_t bstrVar1(”test”);_bstr_t bstrVar2(temp);三、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:整数(int)str.Format(”%d”,i);浮点数(float)str.Format(”%f”,i);字符串指针(char*)等已经被CString构造函数支持的数据类型可以直接赋值str = username;对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char*的方法先转到char *,然后赋值给CString变量。
c语言数据类型转换方式
c语言数据类型转换方式C语言是一种面向过程的编程语言,数据类型转换是在不同数据类型之间进行转换的过程。
C语言提供了强制类型转换和隐式类型转换两种方式。
1. 强制类型转换:强制类型转换是通过使用强制类型转换运算符将一个数据类型转换为另一个数据类型。
其基本语法形式为:(type) expression。
其中,type表示要转换的目标数据类型,expression表示要进行转换的表达式或变量。
例如,将一个整数转换为浮点数类型:```int num = 10;float result = (float) num;```在上述代码中,通过使用强制类型转换运算符将整数类型的变量num转换为浮点数类型,并将结果赋值给浮点数类型的变量result。
2. 隐式类型转换:隐式类型转换是在不使用强制类型转换运算符的情况下自动进行的类型转换。
在某些情况下,C语言会根据所需的数据类型自动将其他类型的值转换为目标类型。
例如,将一个整数除以一个浮点数:```int num1 = 10;float num2 = 3.5;float result = num1 / num2;```在上述代码中,整数类型的变量num1被隐式转换为浮点数类型,以便与浮点数类型的变量num2进行除法运算,最终结果赋值给浮点数类型的变量result。
在进行数据类型转换时,需要注意以下几点:1. 数据精度丢失:在进行数据类型转换时,可能会导致数据精度的丢失。
例如,将一个浮点数转换为整数类型时,小数部分将被截断。
2. 数据溢出:在进行数据类型转换时,可能会导致数据溢出的问题。
例如,将一个大范围的整数转换为较小范围的整数类型时,可能会导致数据溢出,从而导致结果不准确。
3. 不同类型之间的兼容性:在进行数据类型转换时,需要考虑不同数据类型之间的兼容性。
某些数据类型之间可以直接进行转换,而某些数据类型之间需要使用强制类型转换运算符进行转换。
除了基本的数据类型转换之外,C语言还提供了一些特殊的数据类型转换方式,如指针类型转换和结构体类型转换等。
c比较时的隐式类型转换规则
c比较时的隐式类型转换规则在比较时的隐式类型转换规则是计算机科学中一个重要的概念。
当我们对不同数据类型的值进行比较时,系统会自动进行隐式类型转换,以便进行比较操作。
比较运算符(如等于、大于、小于等)会根据一定的规则将不同类型的值转换为统一的类型,然后进行比较。
在比较时的隐式类型转换规则中,存在一些基本的规则和优先级。
首先,数字类型(如整数、浮点数)和布尔类型可以相互进行比较。
而字符串类型与数字类型或布尔类型之间的比较,会将字符串转换为相应的数值或布尔值进行比较。
具体来说,以下是常见的隐式类型转换规则:1. 字符串类型与数字类型的比较:当字符串类型和数值类型进行比较时,系统会尝试将字符串转换为数字类型。
如果字符串可以被解析为一个数字,则将其转换为相应的数值进行比较。
否则,字符串会被转换为NaN(Not a Number)。
2. 字符串类型与布尔类型的比较:当字符串类型和布尔类型进行比较时,系统会将字符串转换为布尔值。
若字符串为空,则转换为false;若字符串不为空,则转换为true。
3. 数字类型与布尔类型的比较:当数值类型和布尔类型进行比较时,系统会将布尔类型转换为对应的数值。
false被转换为0,而true被转换为1。
4. 不同类型之间的比较优先级:在比较时,系统会按照优先级自动转换类型。
例如,当整数类型与浮点数类型进行比较时,整数会被自动转换为浮点数。
而当整数类型与布尔类型进行比较时,布尔类型会被自动转换为整数。
需要注意的是,隐式类型转换可能会导致一些意想不到的结果。
因此,在进行比较操作时,我们应尽量遵循明确的数据类型,并对可能进行的类型转换保持警惕。
总之,比较时的隐式类型转换规则是为了使不同类型的值能够进行比较而进行的自动类型转换。
了解这些规则可以帮助我们更好地理解代码中的比较操作,并避免由于类型转换引起的问题。
C语言数据类型转换
C语言数据类型转换C语言数据类型转换数据类型转换就是将数据(变量、表达式的结果)从一种类型转换到另一种类型。
那么大家知道C语言数据类型转换是怎样的呢?下面一起来看看!例如,为了保存小数你可以将int类型的变量转换为double类型。
数据类型转换的一般格式为:(type_name) expressiontype_name为要转换到的数据类型,expression为表达式。
例如:(float) a; //把a转换为实型(int)(x+y); //把x+y的结果转换为整型(float) 100; //将一个常量转换为实型【示例】将整数转换为浮点数:#include int main(){ int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f ", mean); return 0;}运行结果:Value of mean : 3.400000需要注意的是,类型转换运算符( )的优先级高于/,(double) sum / count会先将 sum 转换为 double 类型,然后再进行除法运算。
如果写作(double) (sum / count),那么运行结果就是 3.000000。
这种由程序员显式进行的转换称为强制类型转换。
除了强制类型转换,在不同数据类型的混合运算中编译器也会隐式地进行数据类型转换,称为自动类型转换。
自动类型转换遵循下面的规则:若参与运算的数据类型不同,则先转换成同一类型,然后进行运算。
转换按数据长度增加的方向进行,以保证精度不降低。
例如int型和long型运算时,先把int量转成long型后再进行运算。
所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
char型和short型参与运算时,必须先转换成int型。
vc数据类型转换(Vcdatatypeconversion)
vc++数据类型转换(Vc++ data type conversion)It (2009-07-23 15:59:46) tags used in VC++: Category: ProgrammingString conversion1.CString transforms into plastic IntCString str=_T ("12345");ATOI ((LPCSTR) STR); / / LPCSTR const char* can be transformed intoCString str= "1"";Int n=atoi (str.GetBuffer (0));2. transfer a CString to an array of char (char*)Char buffer[128]CString str;A.//strcpy methodStrcpy (buffer, str.GetBuffer ());Str.ReleaseBuffer ();B.// forced conversion methodBuffer= (LPTSTR) (LPCTSTR) str;C.//sprintf methodSprintf (buffer,%s, STR);D.CString str;Int, nLength=str.GetLength ();Char * sz=new char[nLength];Sz=str.GetBuffer (0);(LPCSTR) CStringE. can be converted to char* by type forcing, such as CString: CString cStr = "Hello, world"!";Char* zStr = (char*) (LPCTSTR) cStr;3.int turn CStringCString string;Int iValue=100;String.Format (_T ("%d"), iValue);MessageBox (string);The value of "string" is "100""4.char * turn CStringA.Char sz[128];CString str;Str.Format ("%s", SZ);B.CString.format ("%s", char*);CString strtest;Char * charpoint;Charpoint= "give string a value"";Strtest=charpoint; / / direct payment valueC.The char* type can be given directly to the CString and complete automatic conversion, for example:Char* zStr = "Hello, world"!";CString cStr = zStr;5.Float turn CStringFloat f=0.0;CString str;Str.Format ("%f", f);6.CString turn FloatCString str= "0"";Float f=atof (str.GetBuffer (0));7.string turn CStringCString.format ("%s", string.c_str ()); Using c_str () is really better than data () 8.char* turn 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);9.CString turn stringString s (CString.GetBuffer ());GetBuffer () must be ReleaseBuffer (), otherwise there is no space for the buffer to be released10.int turn char *There is a function Itoa () in stdlib.hThe use of itoa:Itoa (I, num, 10);I needs to convert characters into numbersSave character variables after num conversion10 conversion of the number of base (hexadecimal) 10, that is, in accordance with the 10 hexadecimal conversion numbers. Can also be 2, 8, 16, etc., you like the hexadecimal typeChar *itoa (int, value, char*, string, int, Radix);Example:#include "stdlib.h""#include "stdio.h"" (main){Int i=1234;Char s[5];Itoa (I, s, 10);Printf ("%s", s);Getchar ();}11.string turn char * Char *p = string.c_str (); String AA ("AAA");Char, *c=aa.c_str (); String mngName;Char t[200];Memset (T, 0200);Strcpy (T, mngName.)c _ str ());12、cstring to lpcstr将cstring转换成lpcstr, 需要获得cstring的长度, 例如: cstring cstr _ t = ("hello, world!") ;int nlen = cstr.getlength ();lpcstr lpszbuf = cstr.getbuffer (nlen);13、cstring to lpstr这个和第3个技巧是一样的, 例如:cstring cstr _ t = ("hello, world!") ;int nlen = str.getlength ();lpstr lpszbuf = str.getbuffer (nlen);14、char [] to int将字符串类型转换成整数型, 可以使用atoi函数, 例如:char c [10].int n;n = atoi (c);15、char [] to float和第5个技巧一样, 使用atof () 函数可以转换成float型, 例如: char c [10].float f;f = atof (c);16、char * to intchar * str = "100".int i;the = atoi (str).一、其它数据类型转换为字符串短整型 (int)itoa (s, s, 0); / / / 将i转换为字符串放入temp中, 最后一个数字表示十进制itoa (s, s, 2); / / / 按二进制方式转换长整型 (long)ltoa (l, s, 10);二、从其它包含字符串的变量中获取指向该字符串的指针cstring变量str = "2008北京奥运";buf = (lpstr) (lpctstr) str;bstr类型的 _ alternate _ t变量v1 = (_ bstr _ t) "程序员";buf = _ com _ util: convertbstrtostring (_ bstr _ t) v1.三、字符串转换为其它数据类型strcpy (temp, "123");短整型 (int)the = atoi (temp).长整型 (long)l = atol (temp).浮点 (double)d = atof (temp).四、其它数据类型转换到cstring使用cstring的成员函数format来转换, 例如:整数 (int)str.format ("% d").浮点数 (float)str.format ("% f").字符串指针 (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 、 _ alternate _ t 与 colevariantvariant的结构可以参考头文件vc98 \ include \ oaidl.h中关于结构体tagvariant的定义.对于variant变量的赋值: 首先给vt成员赋值, 指明数据类型, 再对联合结构中相同数据类型的变量赋值, 举个例子:alternate work.int a = 2001;va.vt = vt _ 14; / / / 指明整型数据va.lval = a; / / / 赋值对于不马上赋值的variant, 最好先用void variantinit (variantarg to * pvarg); 进行初始化, 其本质是将vt设置为vt _ empty, 下表我们列举vt与常用数据的对应关系:unsigned char bval; _ ui1 vtshort ival; vt _ i2long lval; vt _ 14float fltval; vt _ r4double dblval; vt _ r8alternate _ bool boolval; vt _ boolscode scode; vt _ errorcy cyval; vt _ cydates dates; vt _ datesbstr bstrval; _ bstr vtiunknown to * punkval; vt _ unknownidispatch to * pdispval; _ dispatch vtsafearray to * parray;vt _ array | *unsigned char father * pbval; vt _ byref | vt _ ui1 short father * pival; vt _ byref | vt _ i2long father * plval; vt _ byref | vt _ i4float father * pfltval; vt _ byref | vt _ r4 double father * pdblval; vt _ byref | vt _ r8variant _ all father * pboolval; vt _ byref | vt _ allscode father * pscode; vt _ byref | vt _ errorcy dad * pcyval; vt _ byref | vt _ cydad * date pdate; vt _ byref | vt _ datebstr father * pbstrval; vt _ byref | vt _ bstriunknown dad dad * * ppunkval; vt _ byref | vt _ unknownidispatch dad dad * * ppdispval; vt _ byref | vt _ dispatchsafearray dad dad * * pparray; vt _ array | *variant father * pvarval; vt _ byref | vt _ variantvoid father * byref; vt _ byref_ variant _ t是variant的封装类, 其赋值可以使用强制类型转换, 其构造函数会自动处理这些数据类型.例如:long l = 222;ing in = 100;_ variant _ t lval (l);lval = (long);colevariant的使用与 _ variant _ t的方法基本一样, 请参考如下例子:colevariant v3 = "字符串", v4 = (long) 1999;cstring str = (bstr) v3.pbstrval;long in = 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位后记: 本文匆匆写成, 错误之处在所难免, 欢迎来信指正.int - > str itoa, atoidouble str ftoa, fabrics_ bstr _ t, _ variant _ t, cstring, long 等等看看下面:我给你点详细的例子, 看下面先看懂 _ variant _ t与 _ bstr _ t这两个类的构造函数和operator =里面有重载了很多情况,其他类型向 _ variant _ t 赋值:_ variant _ t (); throw ()_ variant _ t (which variant & varsrc) throw (_ com _ error);_ variant _ t (which variant * pvarsrc) throw (_ com _ error);_ variant _ t (which _ variant _ t & t was _ _ src) throw (_ com _ error);_ variant _ t (variant & varsrc, all fcopy) throw (_ com _ error);_ variant _ t (short ssrc, vartype vtsrc = vt _ i2) throw (_ com _ error);_ variant _ t (long lsrc, vartype vtsrc = vt _ i4) throw (_ com _ error);_ variant _ t (float fltsrc) throw ();_ variant _ t (double dblsrc, vartype vtsrc = vt _ r8) throw (_ com _ error);_ variant _ t (which cy & cysrc) throw ();_ variant _ t (which _ bstr _ t & bstrsrc) throw (_ com _ error);_ variant _ t (which wchar _ t * wstrsrc) throw (_ com _ error);_ variant _ t (which char * strsrc) throw (_ com _ error);_ variant _ t (all bsrc) throw ();_ variant _ t (iunknown * piuknownsrc, all faddref = true) throw ();_ variant _ t (idispatch * pdispsrc, all faddref = true) throw ();_ variant _ t (which decimal & decsrc) throw ();_ variant _ t (byte bsrc) throw ();operator = 的重载形式:_ variant _ t & operator = (which variant & varsrc) throw (_ com _ error);_ variant _ t & operator = (which variant * pvarsrc) throw (_ com _ error);_ variant _ t & operator = (which _ variant _ t & t was _ _ src) throw (_ com _ error);_ variant _ t & operator = (short ssrc) throw (_ com _ error);_ variant _ t & operator = (long lsrc) throw (_ com _ error);_ variant _ t & operator = (float fltsrc) throw (_ com _ error);_ variant _ t & operator = (double dblsrc) throw (_ com _ error);_ variant _ t & operator = (which cy & cysrc) throw (_ com _ error);_ variant _ t & operator = (which _ bstr _ t & bstrsrc) throw (_ com _ error);_ variant _ t & operator = (which wchar _ t * wstrsrc) throw (_ com _ error);_ variant _ t & operator = (char * which strsrc) throw (_ com _ error);_ variant _ t & operator = (idispatch * pdispsrc) throw (_ com _ error);_ variant _ t & operator = (all bsrc) throw (_ com _ error);_ variant _ t & operator = (iunknown * psrc) throw (_ com _ error);_ variant _ t & operator = (which decimal & decsrc) throw (_ com _ error);_ variant _ t & operator = (byte bsrc) throw (_ com _ error); 有了以上两个函数, 举个例子:double f = 1.0_ variant _ t v;v = f; / / 是合法的看看operator = 的重载形式就知道了cstring str = "ddd"_ variant _ t v;v = str.allocsysstring () 或者v = (_ bstr _ t) (char * str); 即可_ variant _ t转换成别的形式你首先必须确定你要转化成什么样的形式double f;_ variant _ t vf = v.dblval 即可或者f = (double) v; 也可以附: _ variant _ t的操作符operator short () which throw (_ com _ error); operator long () which throw (_ com _ error); operator float () which throw (_ com _ error); operator double () which throw (_ com _ error); operator (cy) which throw (_ com _ error);the operator all () which throw (_ com _ error); decimal operator () which throw (_ com _ error); operator byte () which throw (_ com _ error); operator _ bstr _ t () which throw (_ com _ error); operator idispatch * () which throw (_ com _ error); operator iunknown * () which throw (_ com _ error);1 string2 cstringcstring.format ("% s", string.c _ str ());2 cstring 2 stringstring str (cstring.getbuffer (str.getlength ()));3 2 char * stringchar * p = string.c _ str ();4 string char * 2string str (char *);5 cstring 2 char *strcpy (char, cstring, sizeof (char));6 char * 2 cstringcstring.format ("% s", char *);cstring的format方法是非常好用的.string的c _ str () 也是非常常用的, 但要注意和char * 转换时, 要把char定义成为const char *, 这样是最安全的.*********************************************************** *************************************1。
c语言数据类型转换规则
c语言数据类型转换规则C语言中的数据类型转换主要有两种:隐式转换和显式转换。
1. 隐式转换:隐式转换也称为自动类型转换,是指在运算过程中由编译器自动进行的数据类型转换。
隐式转换的规则如下:- 当两个操作数中一个为浮点型,另一个为整型,将整型转换为浮点型。
- 当两个操作数类型不同时,将较小类型转换为较大类型,例如将int类型转换为float类型。
- 当一个操作数为有符号类型,另一个操作数为无符号类型时,将有符号类型转换为无符号类型。
- 当两个操作数为不同的有符号类型,并且其中一个为有符号整型类型,另一个为无符号整型类型,将有符号整型类型转换为无符号整型类型。
例如,下面是一些隐式转换的例子:```cint a = 10;float b = 2.5;float c = a + b; // 将整型a转换为浮点型int d = a + b; // 将浮点型b转换为整型unsigned int e = -5; // 将有符号整型转换为无符号整型```2. 显式转换:显式转换也称为强制类型转换,是通过强制改变数据的类型进行的转换。
在需要进行显式转换时,可以使用类型转换运算符进行转换。
类型转换运算符有以下几种形式:- (type) expression:将表达式expression转换为type类型。
- type (expression):将表达式expression转换为type类型。
类型转换运算符的规则如下:- 当将浮点型转换为整型时,进行截断操作,即舍去小数部分。
- 当将整型转换为浮点型时,进行扩展,添加0作为小数部分。
- 当将整型或浮点型转换为字符型时,只保留最低字节的内容。
例如,下面是一些显式转换的例子:```cint a = 10;float b = 2.5;int c = (int)b; // 将浮点型b转换为整型float d = (float)a; // 将整型a转换为浮点型char e = (char)a; // 将整型a转换为字符型```需要注意的是,在进行显式转换时,可能会导致数据精度的丢失或溢出,因此在进行类型转换时要慎重,确保转换的结果符合预期。
VC中CDC、HDC、pDC区别与联系及相互转换
VC中CDC、HDC、pDC区别与联系及相互转换1.CDC *pDC和HDC hdc有什么不同,类似的有CWnd *pWnd和HWnd?pDC是类指针HDC是windows句柄通过pDC获得hdc:HDC hdc=pDC->GetSafeHdc();通过hdc获得pDC:CDC *pDC=new CDC;pDC->Attach(hdc);2.hDC和CDC有本质区别HDC是WINDOWS的⼀种数据类型,是设备描述句柄。
⽽CDC是MFC⾥的⼀个类,它封装了⼏乎所有的关于HDC的操作。
也可以这样说,HDC定义的变量指向⼀块内存,这内存⽤来描述⼀个设备的相关的内容,所以也可以认为HDC定义的是⼀个指针;⽽CDC类定义⼀个对象,这个对象拥有HDC定义的⼀个设备描述表,同时也包含与HDC相关的操作的函数。
这与HPEN 和CPen,POINT与CPoint之间的差别是⼀样的。
CDC是对hDC的相关操作进⾏封装,例如CDC的⼀个TextOut函数隐去其错误检测,完全可以简化到这样程度CDC:TextOut( int x, int y, const CString& str ){TextOut( m_hDC, x, y, (LPCTSTR)str, str.GetLength() );}m_hDC就是CDC的成员变量HDC m_hDC;CDC有⼀个operator HDC() const { return m_hDC; }你可以把它当成⼀个HDC使⽤3.this是dc输出⽬标窗⼝的指针,通过它可以得到窗⼝句柄,对象带参构造这有什么奇怪的呢?CPaintDC ⽆效区dc,相当于BeginPaint, EndPaintCClientDC 客户区dc,相当于GetDC, ReleaseDCCWindowDC 整窗⼝dc, 相当于GetWindowDC, ReleaseDCCDC 任何dc, 相当于CreateDC, DeleteDC四、区别与联系HDC是句柄;CDC是MFC封装的Windows 设备相关的⼀个类;CClientDC是CDC的衍⽣类,产⽣对应于Windows客户区的对象HDC是WINDOWS的⼀种数据类型,是设备描述句柄。
C调用C的DLL搜集整理的所有数据类型转换方式
C调用C的DLL搜集整理的所有数据类型转换方式在C语言中,调用DLL是一个常见的操作。
DLL(Dynamic Link Library)是一种动态链接库,包含了被多个应用程序共享的函数和数据。
而在C语言中,进行数据类型转换是很常见的需求。
本文将为您介绍C调用C的DLL时,常用的数据类型转换方式的搜集整理。
1. 整型与字符型之间的转换当我们在C程序中需要将整型数值转换为字符型时,可以使用C语言提供的itoa()函数。
该函数将整数转换为字符串,并存储在指定的字符数组中。
示例代码如下:```int num = 123;char str[10];itoa(num, str, 10);```而当我们需要将字符型数值转换为整型时,可以使用C语言提供的atoi()函数。
该函数将字符串转换为整数。
示例代码如下:```char str[] = "123";int num = atoi(str);```2. 整型与浮点型之间的转换在C程序中,整型与浮点型之间的转换是常见的操作。
当我们需要将整型转换为浮点型时,可以使用强制类型转换操作符来实现。
示例代码如下:```int num = 123;float fnum = (float)num;```而当我们需要将浮点型转换为整型时,可以通过强制类型转换实现。
注意,转换过程中会丢失小数部分。
示例代码如下:```float fnum = 123.45;int num = (int)fnum;```3. 字符型与浮点型之间的转换在C程序中,字符型与浮点型之间的转换也是常见的需求。
当我们需要将字符型转换为浮点型时,可以使用强制类型转换操作符来实现。
示例代码如下:```char ch = '1';float fnum = (float)(ch - '0');```而当我们需要将浮点型转换为字符型时,可以使用sprintf()函数。
c语言数据类型转换优先级
c语言数据类型转换优先级摘要:1.C 语言数据类型转换概述2.C 语言数据类型转换优先级规则3.实例分析4.总结正文:【1.C 语言数据类型转换概述】在C 语言编程中,数据类型转换是指将一种数据类型的值转换为另一种数据类型的值。
这种转换通常发生在不同类型的变量之间进行运算时,或者当需要将一个数据类型的值赋给另一个数据类型的变量时。
数据类型转换可以提高程序的灵活性和可读性,但同时也需要注意转换的优先级和规则。
【2.C 语言数据类型转换优先级规则】C 语言中,数据类型转换的优先级遵循以下规则:1) 从低类型到高类型:即从占用内存较小的数据类型向占用内存较大的数据类型转换。
例如,从int 转换为float,从float 转换为double 等。
2) 从简单的数据类型向复杂的数据类型转换:例如,从基本的整型、浮点型转换为结构体、数组等复合数据类型。
3) 指针类型转换:指针类型转换分为两种情况,一种是将基类型指针转换为派生类型指针,另一种是将派生类型指针转换为基类型指针。
其中,将基类型指针转换为派生类型指针时,需要进行类型转换,而将派生类型指针转换为基类型指针时,不需要进行类型转换。
【3.实例分析】以下是一个简单的C 语言程序,演示了数据类型转换的过程:```c#include <stdio.h>int main() {int a = 5;float b = 3.14;double c = 2.718;float db = (float)a; // 将int 类型转换为float 类型double dc = (double)b; // 将float 类型转换为double 类型int di = (int)c; // 将double 类型转换为int 类型printf("a = %d", a);printf("b = %.2f", b);printf("c = %.2lf", c);printf("db = %.2f", db);printf("dc = %.2lf", dc);printf("di = %d", di);return 0;}```该程序首先定义了三个变量a、b 和c,分别属于int、float 和double 类型。
c语言中数组数据类型转化
c语言中数组数据类型转化在C语言中,数组是一种非常常见的数据类型,它可以存储一组相同的数据类型。
在有些情况下,我们可能需要将数组的数据类型进行转化,例如将整型数组转化为字符型数组或浮点型数组。
本文将介绍C语言中数组数据类型转化的方法。
1. 整型数组转化为字符型数组当我们需要将整型数组转化为字符型数组时,需要注意以下几点:(1)字符型数组中每个元素占据一个字节,而整型数组中每个元素占据4个字节(在32位系统中)或8个字节(在64位系统中);(2)整型数组中的每个元素都是一个整数,其值的范围可能比字符型数组中每个元素的范围大;(3)字符型数组中的每个元素应该是字符,而不是ASCII码或整数。
因此,我们需要使用强制类型转换来将整型数组转化为字符型数组,代码示例如下:int int_arr[10] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 }; char char_arr[10];for (int i = 0; i < 10; i++){char_arr[i] = (char)int_arr[i];}printf('%s', char_arr);输出结果为:ABCDEFGHIJ2. 整型数组转化为浮点型数组当我们需要将整型数组转化为浮点型数组时,需要注意以下几点:(1)浮点型数组中每个元素占据4个字节或8个字节,而整型数组中每个元素占据4个字节或8个字节;(2)整型数组中的每个元素都是一个整数,其值的范围可能比浮点型数组中每个元素的范围小;(3)浮点型数组中的每个元素应该是浮点数,而不是整数。
因此,我们需要使用强制类型转换来将整型数组转化为浮点型数组,代码示例如下:int int_arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };float float_arr[10];for (int i = 0; i < 10; i++){float_arr[i] = (float)int_arr[i];}for (int i = 0; i < 10; i++){printf('%f ', float_arr[i]);}输出结果为:1.0000002.0000003.0000004.0000005.0000006.0000007.0000008.0000009.000000 10.0000003. 浮点型数组转化为整型数组当我们需要将浮点型数组转化为整型数组时,需要注意以下几点:(1)浮点型数组中每个元素占据4个字节或8个字节,而整型数组中每个元素占据4个字节或8个字节;(2)浮点型数组中的每个元素都是一个浮点数,其值的范围可能比整型数组中每个元素的范围大或小;(3)整型数组中的每个元素应该是整数,而不是浮点数。
C语言中的类型转换-1L1UL
C语言中的类型转换-1L1ULC语言中的类型转换C语言中的类型转换有两种,自动与强制。
它们都有几种情况,如不同长度的转换;不同类型的转换;还有无符号与有符号数之间的转换。
关键是两点,即长度不同时如何转换,在有无符号数参与时如何转换。
一般的处理方式是长变短时作一个简单的截短操作,内存的对齐方式影响这个结果。
短的变长时,与符号有关,如果是有符号数,则有两种可能,符号扩展或简单地提升(即高位补0)。
这个C标准没有定义,取决于编译器。
所以,在将短的数据转换为长的数据时,最好是用强制的转换。
无符号数就没关系了,结果是一样的。
1.强制类型转换具体形式如下:(类型)表达式这个出错的机会比较小一点,因为由程序员自己控制。
但要注意的,在对指针转换时,如果将一个指向一个较小内存单元的指针转换为一个指向较大内存单元的指针,就会破坏其它内存单元的数据。
这个在自动转换中也有,故在下面一起描述。
强制转换一般是在将一个空指针赋给一个在类型的指针时的操作,如在malloc()操作时。
2.自动类型转换这是最容易出错的,因为C语言对类型的检查比较少,这样设计的好处是给程序员提供编程上的方便,但任何事情都有两面性,自动类型转换有不少副作用。
我们先来看一下自动转换在什么时候发生:1)表达式求值2)赋值3)函数调用这几种转换的细节都可以参考《C程序设计语言》(The C Programming Language, BrianW.Kernighan, Dennis M.Ritchie)一是有无符号数参与的表达式计算C语言中对这个没有规定,取决于实现。
看下面这个例子:#include <stdio.h>int main(void){long a;unsigned short b;unsigned long c, d;short e;a = -1L;b = 1U;d = a + b;printf("a = %dL, b = %uU, d = %uUL, a>b = %d\n",a, b, d, a > b);a = -1L;c = 1UL;d = c + a;printf("a = %dL, c = %uUL, d =%uUL, a>c = %d\n", a, c, d, a > c);e = -1;c = 1UL;d =e + c;printf("e = %d, c = %uUL, d =%uUL, e>c = %d\n", e, c, d, e> c);}运行结果如下(在我的环境中compaq Tru64, cc)a = -1L,b = 1U, d = 0UL, a>b = 0a = -1L, c = 1UL, d =0UL, a>c = 1e = -1, c = 1UL, d =0UL, e>c = 1我们不难发现,在比较操作中,将无符号的短整数扩展为了有符号的长整型。
VC6里用到的一些类型转换
VC6里用到的一些类型转换[引子]在做毕设的时候,用到VC6里面的串口控件。
我对VC几乎是一窍不通的,这次做毕设里面的类型转换也困扰了我好久。
在此小小总结一下。
[主要内容]一、MSComm里用到的VARIANT, COleVariant类型与CString, BYTE之间的转换,以实现数据的发送和接收二、CString与int的转换,实现对接收来的数据的运算一、MSComm和VARIANTVC6自带的串口ActiveX MSComm的对象使用SetOutput()和GetInput()方法实现发送和接收。
这两个函数的参数都是VARIANT类型。
void CMSComm::SetOutput(const VARIANT& newValue)VARIANT CMSComm::GetInput()发送过程:VARIANT其实是一个C++结构类型,COleVariant类型对VARIANT做了进一步的封装和扩展,提供了许多新的功能和操作方法,支持OLE自动化,且更容易向其数据成员填入数据。
由于COleVariant类型由VARIANT派生而来,因此将COleVariant类型的变量传递给SetOutput函数更为方便。
另外,SetOutput的参数newValue类型必须是存放字节类型数据的动态数组。
因此,可以利用Visual C++提供CByteArray类型来构造COleVariant类型的对象,并将其传递给SetOutput函数。
对CByteArray类型变量的操作相对来说要容易的多,比如其成员函数SetSize可用来设置动态数组的大小,下标操作符[]可用来为其元素赋值等等。
下面的程序代码可实现将存放在缓冲区strBuf中的100个字节的数据通过通讯控件发送出去:……BYTE strBuf[128];CByteArray OutBuf;COleVariant varOutput;……OutBuf.SetSize(100);for(i=0;i<100;i++)OutBuf[i] = strBuf[i];//BYTE转CByteArrayvarOutput = OutBuf;//CByteArray转COleVariantm_pCommDlg->m_Comm.SetOutput(varOutput);……利用通讯控件发送数据的关键在于构造COleVariant类型的变量,并向其中填入通讯数据,使其能满足通讯控件的成员函数SetOutput 的需要。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SCODE FAR* pscode; VT_BYREF|VT_ERROR
CY FAR* pcyVal; VT_BYREF|VT_CY
DATE FAR* pdate; VT_BYREF|VT_DATE
BSTR FAR* pbstrVal; VT_BYREF|VT_BSTR
IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN
IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH
SAFEARRAY FAR* FAR* pparray; VT_ARRAY|*
_variant_t lVal(l);
lVal = (long)i;
COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:
COleVariant v3 = "字符串", v4 = (long)1999;
CString str =(BSTR)v3.pbstrVal;
short iVal; VT_I2
long lVal; VT_I4
float fltVal; VT_R4
double dblVal; VT_R8
VARIANT_BOOL boolVal; VT_BOOL
SCODE scode; VT_ERROR
CY cyVal; VT_CY
二、从其它包含字符串的变量中获取指向该字符串的指针
CString变量
str = "2008北京奥运";
buf = (LPSTR)(LPCTSTR)str;
BSTR类型的_variant_t变量
v1 = (_bstr_t)"程序员";
buf = _com_util::ConvertBSTRToString((_bstr_t)v说明
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="女侠程佩君";
char temp[200];
char *buf;
CString str;
VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。
对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:
VARIANT va;
int a=2001;
va.vt=VT_I4;///指明整型数据
_variant_t v1;
_bstr_t v2;
一、其它数据类型转换为字符串
短整型(int)
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2); ///按二进制方式转换
长整型(long)
ltoa(l,temp,10);
三、字符串转换为其它数据类型
strcpy(temp,"123");
短整型(int)
i = atoi(temp);
长整型(long)
l = atol(temp);
浮点(double)
d = atof(temp);
四、其它数据类型转换到CString
使用CString的成员函数Format来转换,例如:
VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANT
void FAR* byref; VT_BYREF
_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
例如:
long l=222;
ing i=100;
对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如:
WORD wValue;
BYTE loValue = LOBYTE(wValue);///取低8位
BYTE hiValue = HIBYTE(wValue);///取高8位
CString str;int i;float f;
//将字符串转换为整型
str="123";
i=atoi(str);
//将字符串转换为单精度型
str="123.123";
f=atof(str);
//将整型和单精度型转换为字符串。
i=123;
f=123.123;
str.Format("%d %f",i,f);
char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR("数据");///使用前需要加上头文件comutil.h
反之可以使用char *p=_com_util::ConvertBSTRToString(b);
六、VARIANT 、_variant_t 与 COleVariant
DATE date; VT_DATE
BSTR bstrVal; VT_BSTR
IUnknown FAR* punkVal; VT_UNKNOWN
IDispatch FAR* pdispVal; VT_DISPATCH
SAFEARRAY FAR* parray; VT_ARRAY|*
long i = v4.lVal;
七、其它
对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如:
LPARAM lParam;
WORD loValue = LOWORD(lParam);///取低16位
WORD hiValue = HIWORD(lParam);///取高16位
unsigned char FAR* pbVal; VT_BYREF|VT_UI1
short FAR* piVal; VT_BYREF|VT_I2
long FAR* plVal; VT_BYREF|VT_I4
float FAR* pfltVal; VT_BYREF|VT_R4
double FAR* pdblVal; VT_BYREF|VT_R8
整数(int)
str.Format("%d",i);
浮点数(float)
str.Format("%f",i);
字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值
str = username;
五、BSTR、_bstr_t与CComBSTR
CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。
va.lVal=a; ///赋值
对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:
unsigned char bVal; VT_UI1
VC常见数据类型转换详解
--------------------------------------------------------------------------------
2003-12-6 23:09:50 阅读279次
刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。