vc数据类型详解
- 格式:doc
- 大小:142.50 KB
- 文档页数:13
VC++中BYTE类型byte是0~255直接的一个数字。
一般都是用byte数组。
byte 类型是一个字节的数据,这个类型有以下几个应用场合:1、最常用的一个场景,就是处理二进制数据流,比如说从某个文件读取一段,我们在读取的时候并不关心这个文件到底是什么格式,只需要关心我需要从哪里开始的多长的一段。
然后我们可以一个字节一个字节去分析这个文件的某部分。
或者我们用来获取网络上传递的信息,或者用来承载串行口传过来的数据等等。
2、最简单的一个场景,就是处理一个字节的数据。
对于来说,一个Char的长度不是一个字节,也不是两个字节,而仅仅是用来表示一个字符得很抽象的类——其实是两个字节,我这么说有我的理由的:比如说字符'A ',如果我们用AscII方式去理解,或者说转换成用AscII编码储存的二进制数据,那就是一个字节;如果用Unicode方式,那么就是两个字节。
也就是说现在不能像VB6那样,用Char来存储一个字节的数据(首先某些二进制值是非法字符,存不进去,其次就算存进去了,也很可能会浪费50%的空间,就算做得很好也不太可能有100%的利用率),你也不要企望一个Char他就一定是代表一个字节的内容。
所以现在我们用Byte来处理一个字节大小的数据。
3、如果你有很多很多的标志位,就是那种只要表示“是或否”的数据,如果你用Boolean就非常不合算,因为Boolean占用4个字节,而Byte只占用一个。
比如你有1百万个这样的标志,那么用Boolean要花费4MB,而用Byte只要1MB。
当然,为建议你最好不要用Byte 来作为标志使用,原因你自己慢慢体会。
现在的内存够大,没必要为了省这么3MB的空间而作出另外一些牺牲。
标题:深度解析C语言数据类型缩写及含义在计算机编程的世界中,数据类型是非常重要的概念。
在C语言中,数据类型的缩写及含义更是程序员们必须熟练掌握的知识点之一。
本文将深度解析C语言中常见的数据类型缩写及其含义,帮助读者更深入地理解这一重要主题。
1. 数据类型的概念在C语言中,数据类型用来声明变量的类型,指定变量可以存储的数据类型及所占用的内存大小。
C语言中的数据类型包括基本数据类型和派生数据类型。
基本数据类型包括整型、浮点型、字符型和空类型,而派生数据类型包括数组、指针、结构体和共用体等。
2. 基本数据类型2.1 int:整型在C语言中,int代表整型数据类型,通常用于声明整数变量。
int类型在不同的系统中所占用的内存大小可能会有所不同,但通常情况下,int类型占用4个字节的内存空间。
2.2 float:单精度浮点型float代表单精度浮点型数据类型,用于声明具有小数部分的变量。
float类型通常占用4个字节的内存空间,用于存储小数,精度约为6位有效数字。
2.3 double:双精度浮点型double代表双精度浮点型数据类型,用于声明双精度小数变量。
double类型通常占用8个字节的内存空间,精度约为15位有效数字。
2.4 char:字符类型char代表字符数据类型,用于存储单个字符的变量。
char类型通常占用1个字节的内存空间。
2.5 void:空类型void代表空类型,用于表示没有类型。
通常用于函数的返回值或指针的类型。
以上是C语言中常见的基本数据类型的缩写及含义。
掌握这些基本数据类型对于程序员来说非常重要,它们是构建任何C语言程序的基础。
3. 派生数据类型3.1 数组:一组相同数据类型的集合数组是C语言中一组相同数据类型的集合,可以存储固定大小的元素。
3.2 指针:存储变量位置区域的变量指针是C语言中非常重要的概念,它用来存储变量的内存位置区域。
指针可以指向任何数据类型的变量,它可以极大地提高程序的灵活性和效率。
一、常用数据类型列表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位指针。
C数据类型及其长度总结C语言中的数据类型及其长度如下:1.基本数据类型:- char类型:用于表示字符,长度为1字节(8位)。
- short类型:用于表示短整型数据,长度为2字节(16位)。
- int类型:用于表示整型数据,长度为4字节(32位)。
- long类型:用于表示长整型数据,长度为4字节(32位)或8字节(64位)。
- float类型:用于表示单精度浮点数,长度为4字节(32位)。
- double类型:用于表示双精度浮点数,长度为8字节(64位)。
2.修饰类型:- signed修饰符:用于将基本整数类型定义为有符号类型,不改变长度。
- unsigned修饰符:用于将基本整数类型定义为无符号类型,不改变长度。
- short修饰符:用于将int类型定义为short类型,长度为2字节(16位)。
- long修饰符:用于将int类型定义为long类型,长度为4字节(32位)或8字节(64位)。
3.变长数据类型(C99标准引入):- bool类型:用于表示布尔值,长度为1字节(8位)。
- imaginary类型:用于表示虚数,长度与对应的复数类型相同。
4.其他数据类型:- enum类型:用于定义枚举类型,长度与int类型相同。
- void类型:用于表示无类型,长度为1字节(8位)。
- size_t类型:用于表示内存块的大小,长度根据处理器架构而定。
- ptrdiff_t类型:用于表示两个指针之间的差值,长度根据处理器架构而定。
需要注意的是,C语言中的数据类型的长度是根据机器架构和编译器的不同而有所变化的。
上述长度是一般情况下的长度,具体情况应根据实际环境而定。
总结起来,C语言中的数据类型及其长度包括基本数据类型、修饰类型、变长数据类型以及其他数据类型。
程序员在编写C语言程序时,需要根据需求选择合适的数据类型来保存和处理数据。
VC常用数据类型总结VC(Visual C++)常用数据类型指的是在C++编程中经常使用的数据类型。
根据数据类型的特性和用途不同,VC常用数据类型可以分为以下几类:1. 基本数据类型(Primitive Data Types):- 整型(Integer Type):用于表示整数,包括有符号整数(signed)和无符号整数(unsigned),例如int、short、long、char等。
- 浮点型(Floating-Point Type):用于表示带小数点的数值,包括单精度浮点型(float)和双精度浮点型(double)。
- 字符型(Character Type):用于表示单个字符,例如char类型。
- 布尔型(Boolean Type):用于表示真(true)或假(false),例如bool类型。
2. 高级数据类型(Advanced Data Types):- 数组(Array):用于存储多个相同类型的元素,例如int数组、char数组等。
- 结构体(Structure):用于封装多个不同类型的变量,例如定义一个包含姓名、年龄等信息的Student结构体。
- 枚举(Enumeration):用于定义一组相关的常量,例如定义星期几的枚举类型。
3. 指针(Pointer):- 指针(Pointer):保存变量的内存地址,可以通过指针间接访问变量的值,例如int*指针。
- 空指针(Null Pointer):指向无效内存地址的指针,通常表示指针未初始化或指向不存在的对象。
- 空指针常量(Null Pointer Constant):表示空指针的特殊值,通常用NULL或nullptr表示。
4. 自定义数据类型(User-Defined Data Types):- 类(Class):用于创建自定义的数据类型,包含数据成员和成员函数。
- 模板(Template):用于创建通用的数据类型,支持不特定的数据类型参数,例如STL容器类(vector、list等)的模板类型。
VC++中BYTE类型byte是0~255直接的一个数字。
一般都是用byte数组。
byte 类型是一个字节的数据,这个类型有以下几个应用场合:1、最常用的一个场景,就是处理二进制数据流,比如说从某个文件读取一段,我们在读取的时候并不关心这个文件到底是什么格式,只需要关心我需要从哪里开始的多长的一段。
然后我们可以一个字节一个字节去分析这个文件的某部分。
或者我们用来获取网络上传递的信息,或者用来承载串行口传过来的数据等等。
2、最简单的一个场景,就是处理一个字节的数据。
对于来说,一个Char的长度不是一个字节,也不是两个字节,而仅仅是用来表示一个字符得很抽象的类——其实是两个字节,我这么说有我的理由的:比如说字符'A ',如果我们用AscII方式去理解,或者说转换成用AscII编码储存的二进制数据,那就是一个字节;如果用Unicode方式,那么就是两个字节。
也就是说现在不能像VB6那样,用Char来存储一个字节的数据(首先某些二进制值是非法字符,存不进去,其次就算存进去了,也很可能会浪费50%的空间,就算做得很好也不太可能有100%的利用率),你也不要企望一个Char他就一定是代表一个字节的内容。
所以现在我们用Byte来处理一个字节大小的数据。
3、如果你有很多很多的标志位,就是那种只要表示“是或否”的数据,如果你用Boolean就非常不合算,因为Boolean占用4个字节,而Byte只占用一个。
比如你有1百万个这样的标志,那么用Boolean要花费4MB,而用Byte只要1MB。
当然,为建议你最好不要用Byte 来作为标志使用,原因你自己慢慢体会。
现在的内存够大,没必要为了省这么3MB的空间而作出另外一些牺牲。
APIPlatform SDK: COMTranslating to Visual Basic from C++Using the C++ programming language, developers can directly access the memory that stor es a particular variable. Memory pointers provide this direct access. In Visual Basic, pointers are handled for you. For example, a parameter declared as a pointer to an int in C++ is equivalent to a parameter declared in Visual Basic as a ByRef Integer.A parameter that is declared As String in Visual Basic is declared as a pointer to a BSTR i n C++. Setting a string pointer to NULL in C++ is equivalent to setting the string to the vb NullString constant in Visual Basic. Passing in a zero-length string ("") to a function design ed to receive NULL does not work, as this passes a pointer to a zero-length string instead o f a zero pointer.C++ supports data containers, namely structures and unions, that have no equivalent in Vis ual Basic. For this reason, COM objects typically wrap information that usually is stored in st ructures and unions in object classes. Some COM objects, however, may contain structures, causing portions of the object's methods or functionality to be inaccessible to Visual Basic.NoteFuture versions of Visual Basic, version 6.0 and beyond, will support structures.Some C++ data types are not supported in Visual Basic, for example unsigned types and HWND types. Methods that accept or return these data types are not available in Visual Ba sic.Visual Basic uses Automation-compatible data types as its internal data types. Thus, C++ da ta types that are Automation-compatible are also compatible with Visual Basic. Data types t hat are not Automation-compatible may not be able to be converted to Visual Basic. For mo re information about Automation data types, see the Automation documentation in the Platfo rm SDK.The following table lists the data types are supported by Visual Basic and their VARTYPE e quivalents. VARTYPE is an enumeration that lists the Automation variant types.Visual Basic data type VARTYPE equivalentInteger16 bit, signed, VT_I2Long32 bit, signed, VT_I4Date VT_DATECurrency VT_CYObject*VT_DISPATCHString VT_BSTRBoolean VT_BOOLCurrency VT_DECIMALSingle VT_R4Double VT_R8Decimal VT_DECIMALByte VT_DECIMALVariant VT_VARIANTAll parameters in Visual Basic, unless labeled with the keyword ByVal, are passed by refere nce (as pointers) instead of by value.C++ and Visual Basic differ slightly in how they represent properties. In C++, properties ar e represented as a set of accessor functions, one that sets the property value and one that retrieves the property value. In Visual Basic, properties are represented as a single item tha t can be used to retrieve or set the property value.VC与VB数据类型对应关系VB调用C DLL时的参数传递函数在C中的原型,参数类型和传递方式对应关系C DLL 原型VB声明VB调用USHORT a ByVal a as long Call func(…,a,…)int a ByVal a as long Call func(…,a,…)long a ByRef a as long Call func(…,byval a,…)int *pa ByRef pa as lon g Call func(…,pa,…)long *pa ByVal pa as long Call func(…,varptr(pa),…) <---------(1)LPSTR lpStr ByVal lpStr as string Call func(…,lpStr,…)char *pstr ByVal pstr as string Call func(…,pstr,…) <---------(2)wchar *pstr ByRef pstr as string Call func(…,byval pstr,…)struct tagX *p ByRef p as tagX Call func(…,ptag,…) <---------(3)HANDLE h ByVal h as long Call func(…,h,…) <---------(4)备注1)不推荐使用此方式2)如果DLL要求一个字符串缓冲区,一定要在调用前初始化字串,即dim t as string * 503)用户定义子类型必须用ByRef方式传递,4)任何内核对象的句柄(process, thread, module, file, filemapping, semaphore等)和大多数GDI对象的句柄都能用此方式传递。
C语言各种数据类型在系统中占的字节和取值范围基本类型包括字节型(char)、整型(int)和浮点型(float/double)。
定义基本类型变量时,可以使用符号属性signed、unsigned(对于char、int),和长度属性short、long(对于int、double)对变量的取值区间和精度进行说明。
下面列举了Dev-C++下基本类型所占位数和取值范围:符号属性长度属性基本型所占位数取值范围输入符举例输出符举例-- -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u signed -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u unsigned -- char 8 0 ~ 2^8-1 %c %c、%d、%u [signed] short [int] 16 -2^15 ~ 2^15-1 %hdunsigned short [int] 16 0 ~ 2^16-1 %hu、%ho、%hx [signed] -- int 32 -2^31 ~ 2^31-1 %dunsigned -- [int] 32 0 ~ 2^32-1 %u、%o、%x[signed] long [int] 32 -2^31 ~ 2^31-1 %ldunsigned long [int] 32 0 ~ 2^32-1 %lu、%lo、%lx [signed] long long [int] 64 -2^63 ~ 2^63-1 %I64dunsigned long long [int] 64 0 ~ 2^64-1 %I64u、%I64o、%I64x -- -- float 32 +/- 3.40282e+038 %f、%e、%g-- -- double 64 +/- 1.79769e+308 %lf、%le、%lg %f、%e、%g -- long double 96 +/- 1.79769e+308 %Lf、%Le、%Lg几点说明:1. 注意! 表中的每一行,代表一种基本类型。
VC++常用数据类型及其操作详解-------西安邮电学院计算机系徐兆元()2004/08/03 目录一.VC常用数据类型列表二.常用数据类型转化2.1数学类型变量与字符串相互转换2.2CString及string,char *与其他数据类型的转换和操作●CString,string,char*的综合比较●数学类型与CString相互转化●CString与char*相互转换举例●CString 与BSTR 型转换●V ARIANT 型转化成CString 型2.3 BSTR、_bstr_t与CComBSTR2.4 V ARIANT 、_variant_t 与COleVariant附录CString及字符串转及操作详解参考书籍:CSDN,<<MFC深入浅出(Second Edit)>>一.VC常用数据类型列表说明:(1)-------表示省略(2)1Byte=8Bit,字与机器有关,在8位系统中:字=1字节,16位系统中,1字=2字节,32位中:1字=4字节, 64位中1字=8字节.不要搞混这些概念.二.常用数据类型转化及操作2.1 数学类型变量与字符串相互转换(这些函数都在STDLIB.H里)(1)将数学类型转换为字符串可以用以下一些函数:举例: _CRTIMP char * __cdecl _itoa(int, char *, int);//这是一个将数字转换为一个字符串类型的函数,最后一个int表示转换的进制如以下程序: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 __int64, 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, wchar_t *, int);//转换为长字符串类型_CRTIMP wchar_t * __cdecl _ltow (long, wchar_t *, int);_CRTIMP wchar_t * __cdecl _ultow (unsigned long, wchar_t *, int);还有很多,请自行研究(2)将字符串类型转换为数学类型变量可以用以下一些函数:举例: _CRTIMP int __cdecl atoi(const char *);//参数一看就很明了char *szChar=”88”;int temp(0);temp=atoi(szChar);cout<<temp;类似的函数列表:_CRTIMP int __cdecl atoi(const char *);_CRTIMP double __cdecl 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 strtod(const char *, char **);//_CRTIMP long __cdecl strtol(const char *, char **, int);//_CRTIMP long double __cdecl _strtold(const char *, char **);_CRTIMP unsigned long __cdecl strtoul(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*的综合比较>>写的很详细,请大家在仔细阅读他的文章.地址: /或参考附录:(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 类型.BSTR 是一种记数字符串,Intel平台上的宽字符串(Unicode),并且可以包含嵌入的NULL 字符。
可以调用CString 对象的AllocSysString 方法将CString 转化成BSTR:CString str;str = .....; // whateverBSTR bStr = str.AllocSysString();BSTR型转换为CString如果你在UNICODE 模式下编译代码,你可以简单地写成:CString convert(BSTR bStr){if(bStr == NULL)return CString(_T(""));CString s(bStr); // in UNICODE modereturn s;}如果是ANSI 模式CString convert(BSTR b){CString s;if(b == NULL)return s; // empty for NULL BSTR#ifdef UNICODEs = b;#elseLPSTR p = s.GetBuffer(SysStringLen(b) + 1);::WideCharToMultiByte(CP_ACP, // ANSI Code Page0, // no flagsb, // source widechar string-1, // assume NUL-terminatedp, // target bufferSysStringLen(b)+1, // target buffer lengthNULL, // use system default charNULL); // don''t care if default used s.ReleaseBuffer();#endifreturn s;}●V ARIANT 型转化成CString 型V ARIANT 类型经常用来给COM 对象传递参数,或者接收从COM 对象返回的值。
你也能自己编写返回V ARIANT 类型的方法,函数返回什么类型依赖可能(并且常常)方法的输入参数(比如,在自动化操作中,依赖与你调用哪个方法。
IDispatch::Invoke 可能返回(通过其一个参数)一个包含有BYTE、WORD、float、double、date、BSTR 等等V ARIANT 类型的结果,(详见MSDN 上的V ARIANT 结构的定义)。
在下面的例子中,假设类型是一个BSTR的变体,也就是说在串中的值是通过bsrtVal 来引用,其优点是在ANSI 应用中,有一个构造函数会把LPCWCHAR 引用的值转换为一个CString(见BSTR-to-CString 部分)。
在Unicode 模式中,将成为标准的CString 构造函数,参见对缺省::WideCharToMultiByte 转换的告诫,以及你觉得是否可以接受(大多数情况下,你会满意的)。
V ARIANT vaData;vaData = m_com.YourMethodHere();ASSERT(vaData.vt == VT_BSTR);CString strData(vaData.bstrVal);你还可以根据vt 域的不同来建立更通用的转换例程。
为此你可能会考虑:CString VariantToString(V ARIANT * va){CString s;switch(va->vt){ /* vt */case VT_BSTR:return CString(vaData->bstrVal);case VT_BSTR | VT_BYREF:return CString(*vaData->pbstrVal);case VT_I4:s.Format(_T("%d"), va->lVal);return s;case VT_I4 | VT_BYREF:s.Format(_T("%d"), *va->plVal);case VT_R8:s.Format(_T("%f"), va->dblVal);return s;... 剩下的类型转换由读者自己完成default:ASSERT(FALSE); // unknown V ARIANT type (this ASSERT is optional)return CString("");} /* vt */}2.3 BSTR、_bstr_t与CComBSTRCComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。