在VC6.0下面数据类型装换
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 的需要。
c各种数据类型之间相互转化
c各种数据类型之间相互转化⑴. char *转换到BSTRBSTR b = _com_util::ConvertStringT oBSTR("数据");SysFreeString(bstrValue);(2).BSTR转换到char*char *p=_com_util::ConvertBSTRToString(b);delete p;12.typedef和typename要害字这两个要害字在运用的时辰时例会令人迷惑,其实很简单,typedef 是类型定义, 而typename是类型解释2009年04月20日类型转换是将一种类型的值映射为另一种类型的值进行数据类型的转换是在实际代码编写中经常遇到的问题,出格是字符串和其它类型的转换1.将字符串转换为整儿(1).转换函数// 双精度函数double atof(const char *string);double _wtof(const wchar_t *string);自适应TCHAR:_tstof 、_ttofVS2005:_atof_l 、_wtof_l 、_atodbl 、_atodbl_l// 整型函数int atoi(const char *string);_int64 _atoi64(const char *string);int _wtoi(const wchar_t *string);_int64 _ wtoi64(const char *string);自适应TCHAR:_tstoi 、_ttoi 、_tstoi64 、_ttoi64VS2005:_atoi_l 、_wtoi_l 、_atoi64_l 、_wtoi64_l//长整形函数long atol(const char * string);long _wtol(const wchar_t *string);自适应TCHAR:_tstoi 、_ttoiVS2005:_atoi_l 、_wtoi_l可参考:.cn/s/blog_4135af570100b0d9.ht ml (2).代码参考Cstring ting ="1234";int num = atoi(ting);num的值为1234.CString ting = "1234 ";double num = atof(ting);最终结果:num值为1234.0000000000000 2.int 转换为字符串cahr *_itoa(int value,char *string,int radix);char *_i64toa(_int64 value,char *string,int radix);char * _ui64toa( unsigned _int64 value, char *string,int radix);wchar_t * _itow(int value,wchar_t *string,int radix);wchar_t * _i64tow(_int64 value,wchar_t *string,int radix);wchar_t * _ui64tow( unsigned _int64 value, wchar_t *string,int radix);参数的意义:value 是指要转换的整儿,sring 是用来存放转换后结果的便当,radix是用来说明转换成几进制的数据,默认值是十进制数的转换的进制范围是二进制到三十六进制示例代码:int iii = 9;char ii[100];itoa(iii, ii, 10);ii 中的结果就是字符串"9"int iii = 12;char ii[100];itoa(iii, ii, 2);ii 中的结果是字符串"1100"3.long 转换为字符串char *_ltoa( long value,char *string, int radix );wchar_t *_ltow( long value, wchar_t *string, int radix );其中,参数value 为被转换的值,参数string为字符串缓冲区,radix 为进制代码参考:ling l = 100; char temp[10];memset(temp,0,10);ltoa(l,temp,10);4.double 转换为字符串char *_fcvt( double value, int count, int *dec, int *sign );其中参数value 为双精度数,参数count为转换的小数点后面的位数,dec表示小数点的位置,sign 表示符号代码参数如下int decimal, sign;char *buffer;dobule source = 3.35;buffer = _fcbt( source, 7, &decimal, &sign );输出结果:sourec:3.35; buffer:'''' decimal: 1 sign:05.日期类型转换为字符串将一日期格式转换为字符串,利用了格式化函数,参考代码如下:CTime ti = Ctime::GetCurrentTime();Cstring strTemp("");strTemp = ti.Format("%Y%m%d %H%H%S")6.字符串转换为短整型int atoi( const char *string );其中,参数const char *string为要转换的字符串,返回值为转换的结果7.字符串转换为长整型long atol(const char * string)8.字符串转换为双精度类型double atof(const char* string)代码参考:#include#include。
c语言数据类型转换规则
c语言数据类型转换规则# C语言数据类型转换规则C语言是一种广泛应用的编程语言,其数据类型转换规则在编写程序时十分重要。
数据类型转换可以将一个数据类型的值转换为另一个数据类型的值,以适应不同的操作和需求。
在C语言中,数据类型转换有一定的规则和注意事项。
## 数据类型的分类C语言中的数据类型可以分为基本数据类型和派生数据类型两大类。
### 基本数据类型C语言的基本数据类型包括整型(int)、浮点型(float)、字符型(char)和布尔型(bool)等。
这些数据类型的特点和所能表示的范围是不同的,因此在进行数据类型转换时需要注意。
### 派生数据类型C语言的派生数据类型是通过基本数据类型进行扩展得到的数据类型,包括数组、指针和结构体等。
这些数据类型的转换规则同样需要遵守C语言的规范,并考虑到其特殊的性质。
## 数据类型转换规则1. **隐式类型转换**在C语言中,有一些情况下编译器会自动进行数据类型转换,而不需要我们显式地进行转换操作。
这种转换被称为隐式类型转换,常见的情况包括:- 整型和浮点型的混合运算:当一个整型操作数和一个浮点型操作数进行运算时,整型操作数会被自动转换为浮点型,然后进行运算。
- 字符和整型的相互转换:字符型在内存中的存储实际上是对应的ASCII码值,因此字符型可以看作是整型。
在一些情况下,字符型可以隐式地转换为整型来进行运算。
2. **显式类型转换**在一些特定的情况下,我们需要显式地指定数据类型进行转换,这就是显式类型转换。
在C语言中,可以使用类型转换符进行显式类型转换,常用的类型转换符有:- `(int)`:将其他类型转换为整型。
- `(float)`:将其他类型转换为浮点型。
- `(char)`:将其他类型转换为字符型。
在进行显式类型转换时,需要注意一些细节问题。
例如,转换会造成数据精度改变或信息损失等情况,在使用时需要谨慎考虑。
## 注意事项在进行数据类型转换时,有一些注意事项需要考虑,以确保程序的正确性和可读性。
VisualC++基础数据类型的转换
VisualC++基础数据类型的转换16.1如何将基本数据类型转换成CString类型用CString的Format方法void CDemoView::OnDraw(CDC* pDC) { int a = 100; double b = 1.23; //将整型转换成CString CString str1 = _T(""); str1.Format(_T("%d"), a); //将实型转换成CString CString str2 = _T(""); str2.Format(_T("%f"), b); CString strText = _T(""); strText.Format(_T("str1 = %s"), str1); pDC->TextOut(100, 50, strText); strText.Format(_T("str2 = %s"), str2); pDC->TextOut(100, 100, strText); }16.2如何将CString类型转换成基本数据类型atoi:Convert a string to integer.参考:/view/653935.htmvoid CDemoView::OnDraw(CDC* pDC) { CString str1 =_T("100"); CString str2 = _T("1.23"); //将CString转换成整型int a = atoi(str1); //将CString转换成实型double b = atof(str2); CString strText = _T(""); strText.Format(_T("a = %d"), a); pDC->TextOut(100, 50, strText); strText.Format(_T("b = %f"), b); pDC->TextOut(100, 100, strText); }16.3如何将TCHAR类型转换成CString类型void CDemoView::OnDraw(CDC* pDC) { TCHAR sz[] =_T("Hello world!"); //直接赋值 CString str1 = sz; //调用CString::Format函数CString str2 = _T(""); str2.Format(_T("%s"), sz); CString strText = _T(""); strText.Format(_T("str1 = %s"), str1); pDC->TextOut(100, 50, strText); strText.Format(_T("str2 = %s"), str2);pDC->TextOut(100, 100, strText); }16.4如何将CString类型转换成TCHAR类型void CDemoView::OnDraw(CDC* pDC) { CString str =_T("Hello world!"); //强制转换LPTSTR psz1 = (LPTSTR)(LPCTSTR)str; //调用CString::GetBuffer函数 LPTSTR psz2 = str.GetBuffer(str.GetLength()); str.ReleaseBuffer(); CString strText = _T(""); strText.Format(_T("psz1 = %s"), psz1); pDC->TextOut(100, 50, strText); strText.Format(_T("psz2 = %s"), psz2); pDC->T extOut(100, 100, strText); }16.5如何将TCHAR类型转换成BSTR类型void CDemoView::OnDraw(CDC* pDC) { TCHAR sz[] =_T("Hello world!"); //调用ConvertStringToBSTR函数 BSTR bstr1 = _com_util::ConvertStringT oBSTR(sz); //使用_bstr_t BSTR bstr2 = _bstr_t(sz); CString strText = _T(""); strText.Format(_T("bstr1 = %s"), (CString)bstr1); pDC->TextOut(100, 50, strText); strText.Format(_T("bstr2= %s"), (CString)bstr2); pDC->TextOut(100, 100, strText); }16.6如何将BSTR类型转换成TCHAR类型void CDemoView::OnDraw(CDC* pDC) { BSTR bstr = L"Hello world!"; //调用ConvertBSTRT oString函数 LPTSTR psz = _com_util::ConvertBSTRT oString(bstr); CString strText =_T(""); strText.Format(_T("psz = %s"), psz); pDC->TextOut(100, 50, strText); }16.7 如何将BSTR类型转换成CString类型SysAllocString和SysFreeStringvoid CDemoView::OnDraw(CDC* pDC) { BSTR bstr= ::SysAllocString(L"Hello world!"); //强制转换 CString str = (CString)bstr; CString strText = _T(""); strText.Format(_T("str= %s"), str); pDC->TextOut(100, 50, strText); ::SysFreeString(bstr); }16.8如何将CString类型转换成BSTR类型void CDemoView::OnDraw(CDC* pDC) { CString str =_T("Hello world!"); //调用CString::AllocSysString函数 BSTRbstr = str.AllocSysString(); CString strText = _T(""); strText.Format(_T("bstr = %s"), (CString)bstr); pDC->TextOut(100, 50, strText); ::SysAllocString(bstr); }16.9 如何将DWORD类型转换成WORD类型LOWORD和HIWORDvoid CDemoView::OnDraw(CDC* pDC) { //将1个DWORD类型数据分解成2个WORD类型数据DWORD dwValue =0xFFAA5500; WORD wLow = LOWORD(dwValue); WORD wHigh = HIWORD(dwValue); CString strText = _T(""); strText.Format(_T("DWORD:0x%08X"), dwValue); pDC->TextOut(100, 50, strText); strText.Format(_T("low-order word:0x%04X"), wLow); pDC->TextOut(100, 100, strText); strText.Format(_T("high-order word:0x%04X"), wHigh); pDC->TextOut(100, 150, strText); }16.10 如何将WORD类型转换成BYTE类型LOBYTE和HIBYTEvoid CDemoView::OnDraw(CDC* pDC) { //将1个WORD类型数据分解成2个BYTE类型数据WORD wValue = 0xFF00; BYTE bLow = LOBYTE(wValue); BYTE bHigh = HIBYTE(wValue); CString strText = _T(""); strText.Format(_T("WORD:0x%04X"),wValue); pDC->TextOut(100, 50, strText); strText.Format(_T("low-order byte:0x%02X"), bLow); pDC->TextOut(100, 100, strText); strText.Format(_T("high-order byte:0x%02X"), bHigh); pDC->TextOut(100, 150, strText); }16.11如何将WORD类型组合成DWORD类型void CDemoView::OnDraw(CDC* pDC) { //将2个WORD类型数据组合成1个DWORD类型数据 WORD wLow = 0x5500; WORD wHigh = 0xFFAA; DWORD dwValue = MAKELONG(wLow, wHigh); CString strText = _T(""); strText.Format(_T("low-order word:0x%04X"), wLow); pDC->TextOut(100, 50, strText); strText.Format(_T("high-order word:0x%04X"), wHigh); pDC->TextOut(100, 100, strText); strText.Format(_T("DWORD:0x%08X"), dwValue); pDC->TextOut(100, 150, strText); }16.12 如何将BYTE类型转换成WORD类型void CDemoView::OnDraw(CDC* pDC) { //将2个BYTE类型数据组合成1个WORD类型数据 BYTE bLow = 0x00; BYTE bHigh = 0xFF; WORD wValue = MAKEWORD(bLow, bHigh); CString strText = _T(""); strText.Format(_T("low-order byte:0x%02X"), bLow); pDC->TextOut(100, 50, strText); strText.Format(_T("high-order byte:0x%02X"), bHigh); pDC->TextOut(100, 100, strText); strText.Format(_T("WORD:0x%04X"), wValue); pDC->T extOut(100, 150, strText); }16.13 如何将COLORREF类型转换成RGB分量void CDemoView::OnDraw(CDC* pDC) { COLORREF cr = RGB(255, 128, 0); //R分量 BYTE RED = GetRValue(cr); //G分量 BYTE GREEN = GetGValue(cr); //B分量 BYTE BLUE = GetBValue(cr); CString strText = _T(""); strText.Format(_T("COLORREF值:0x%08X"), cr); pDC->TextOut(100, 50, strText); strText.Format(_T("R分量:0x%02X"), RED); pDC->TextOut(100, 100, strText); strText.Format(_T("G分量:0x%02X"), GREEN); pDC->TextOut(100, 150, strText); strText.Format(_T("B分量:0x%02X"), BLUE); pDC->TextOut(100, 200, strText); }16.14 如何给VARIANT类型赋值void CDemoView::OnDraw(CDC* pDC) { VARIANT var; CString strText = _T(""); //初始化VARIANT类型变量VariantInit(&var); //给VARIANT类型变量赋值 var.vt = VT_I4; var.lVal = (long)100; strText.Format(_T("var = %d"), var.lVal); pDC->TextOut(100, 50, strText); //清除VARIANT类型变量VariantClear(&var); //给VARIANT类型变量赋值var.vt = VT_R4; var.fltVal = 1.23f; strText.Format(_T("var= %f"), var.fltVal); pDC->TextOut(100, 100, strText); //改变VARIANT类型变量数据类型 VariantChangeType(&var, &var, 0, VT_R8); strText.Format(_T("var = %f"), var.dblVal); pDC->TextOut(100, 150, strText); }16.15 如何将BYTE转换成KB、MB和GBvoid CDemoDlg::OnTest() { int nNum1 = GetDlgItemInt(IDC_NUM1); CString strNum2 = _T(""); //转换成GB if (nNum1 > GB) { strNum2.Format(_T("%0.2fGB"), (double)nNum1 / GB); } //转换成MB else if (nNum1 > MB) { strNum2.Format(_T("%0.2fMB"), (double)nNum1 / MB); } //转换成KB else if (nNum1 > KB) { int n = nNum1 /KB; strNum2.Format(_T("%0.2fKB"), (double)nNum1 / KB); } else { strNum2.Format(_T("%dByte"), nNum1); } SetDlgItemT ext(IDC_NUM2, strNum2); }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: 0•decimal表示小数点的位置,sign表示符号:0为正数,1为负数•CString变量•str = "2008北京奥运";•buf = (LPSTR)(LPCTSTR)str;•BSTR变量•BSTR bstrValue = ::SysAllocString(L"程序员");•char * buf = _com_util::ConvertBSTRT oString(bstrValue);•SysFreeString(bstrValue);•AfxMessageBox(buf);•delete(buf);•CComBSTR变量•CComBSTR bstrVar("test");•char *buf = _com_util::ConvertBSTRT oString(bstrVar.m_str);•AfxMessageBox(buf);•delete(buf);•_bstr_t变量•_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用•_bstr_t bstrVar("test");•const char *buf = bstrVar;///不要修改buf中的内容•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变量。
VC6与VS2008类型转换
VC6.0与VS2008数据类型转换问题UNICODE计算机发明后,为了在计算机中表示字符,人们制定了一种编码,叫ASCII码。
ASCII码由一个字节中的7位(bit)表示,范围是0x00 - 0x7F 共128个字符。
他们以为这128个数字就足够表示abcd....ABCD....1234 这些字符了。
咳......说英语的人就是“笨”!后来他们突然发现,如果需要按照表格方式打印这些字符的时候,缺少了“制表符”。
于是又扩展了ASCII的定义,使用一个字节的全部8位(bit)来表示字符了,这就叫扩展ASCII 码。
范围是0x00 - 0xFF 共256个字符。
咳......说中文的人就是聪明!中国人利用连续2个扩展ASCII码的扩展区域(0xA0以后)来表示一个汉字,该方法的标准叫GB-2312。
后来,日文、韩文、阿拉伯文、台湾繁体(BIG-5)......都使用类似的方法扩展了本地字符集的定义,现在统一称为MBCS 字符集(多字节字符集)。
这个方法是有缺陷的,因为各个国家地区定义的字符集有交集,因此使用GB-2312的软件,就不能在BIG-5的环境下运行(显示乱码),反之亦然。
咳......说英语的人终于变“聪明”一些了。
为了把全世界人民所有的所有的文字符号都统一进行编码,于是制定了UNICODE标准字符集。
UNICODE 使用2个字节表示一个字符(unsigned shor int、WCHAR、_wchar_t、OLECHAR)。
这下终于好啦,全世界任何一个地区的软件,可以不用修改地就能在另一个地区运行了。
虽然我用IE 浏览日本网站,显示出我不认识的日文文字,但至少不会是乱码了。
UNICODE 的范围是0x0000 - 0xFFFF 共6万多个字符,其中光汉字就占用了4万多个。
嘿嘿,中国人赚大发了:0)在程序中使用各种字符集的方法:const char * p = "Hello"; // 使用ASCII 字符集const char * p = "你好"; // 使用MBCS 字符集,由于MBCS 完全兼容ASCII,多数情况下,我们并不严格区分他们LPCSTR p = "Hello,你好"; // 意义同上const WCHAR * p = L"Hello,你好"; // 使用UNICODE 字符集LPCOLESTR p = L"Hello,你好"; // 意义同上// 如果预定义了_UNICODE,则表示使用UNICODE字符集;如果定义了_MBCS,则表示使用MBCSconst TCHAR * p = _T("Hello,你好");LPCTSTR p = _T("Hello,你好"); // 意义同上在上面的例子中,T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一种中间类型,既不明确表示使用MBCS,也不明确表示使用UNICODE。
c语言不同类型数据间的转换
c语言不同类型数据间的转换C语言中,不同类型的数据之间需要进行转换的情况是非常常见的。
这些数据类型包括整型、浮点型、字符型等。
本文将详细介绍在C 语言中不同类型数据间的转换方式和规则。
一、整型数据间的转换在C语言中,整型数据间的转换可以分为两种情况:从较小的整型向较大的整型转换以及从较大的整型向较小的整型转换。
1. 从较小的整型向较大的整型转换当把一个较小的整型数据赋值给一个较大的整型变量时,C语言会自动进行类型转换,保证数据的正确传递。
例如,将一个short类型的变量赋值给一个int类型的变量,编译器会自动将short类型转换为int类型。
2. 从较大的整型向较小的整型转换当把一个较大的整型数据赋值给一个较小的整型变量时,C语言会截断高位数据,只保留低位数据。
这可能导致数据的精度丢失。
为了避免这种情况,可以使用强制类型转换来告诉编译器我们知道可能会有精度丢失。
例如,将一个int类型的变量赋值给一个short 类型的变量,可以使用强制类型转换来明确告知编译器。
二、浮点型数据间的转换在C语言中,浮点型数据间的转换也包含两种情况:从较小的浮点型向较大的浮点型转换以及从较大的浮点型向较小的浮点型转换。
1. 从较小的浮点型向较大的浮点型转换当把一个较小的浮点型数据赋值给一个较大的浮点型变量时,C语言会自动进行类型转换,保证数据的正确传递。
例如,将一个float类型的变量赋值给一个double类型的变量,编译器会自动将float类型转换为double类型。
2. 从较大的浮点型向较小的浮点型转换当把一个较大的浮点型数据赋值给一个较小的浮点型变量时,C语言会进行舍入操作,只保留有效位数,可能导致精度丢失。
为了避免这种情况,可以使用强制类型转换来明确告知编译器。
例如,将一个double类型的变量赋值给一个float类型的变量,可以使用强制类型转换来告知编译器。
三、字符型数据和整型数据间的转换在C语言中,字符型数据和整型数据之间的转换是非常常见的。
C++builder6.0(BCB)中的类型转换总结
C++builder6.0(BCB)中的类型转换总结1. IntToStr将整数转换为AnsiString字符串,函数原型如下:AnsiString __fastcall IntToStr(int Value);2. IntToHex将整数转换为⼗六进制字符串,函数原型如下:AnsiString __fastcall IntToHex(int Value, int Digits);3. StrToInt将AnsiString字符串转换为整数值,如果不能进⾏转换,则产⽣EConvertError异常,函数原型如下:int __fastcall StrToInt(const AnsiString S);4. StrToIntDef将AnsiString字符串转换为⼀个数值,函数原型如下:int __fastcall StrToIntDef(const System::AnsiString S,int Default);5. FloatToStr将浮点数转换为AnsiString字符串,函数原型如下:AnsiString __fastcall FloatToStr(Extended Value);6. StrToFloat将AnsiString字符串转换为⼀个浮点数值,函数原型如下:Extended __fastcall StrToFloat(const AnsiString S);7. FloatToStrF将浮点数转换为指定格式的AnsiString字符串,函数原型如下:AnsiString __fastcall FloatToStrF(Extended Value, TFloatFormat Format,int Precision, int Digits);8.TimeToString将TDateTime对象所对应的时间转换成字符串。
9.DateToString将TDateTime对象所对应的⽇期转换成字符串。
C语言中的数据类型转换方法
C语言中的数据类型转换方法在C语言中,数据类型转换是一项常见的操作,可以帮助我们在程序中处理不同类型的数据。
在C语言中,数据类型转换主要分为隐式转换和显式转换两种方法。
首先我们来介绍隐式转换。
隐式转换是指在表达式中不需要明确指定类型转换,编译器会自动根据运算符的类型来进行转换。
例如,当一个整数类型的值参与带有浮点数运算符的表达式时,整数会被自动转换为浮点数,以保证运算的正确性。
这种转换是由编译器自动完成的,程序员不需要额外的操作。
除了隐式转换外,C语言还支持显式转换,也称为强制类型转换。
显式转换需要程序员手动指定转换的类型,使用强制类型转换运算符进行操作。
强制类型转换的语法格式为:(type) expression。
其中type为要转换的目标类型,expression为需要转换的表达式。
通过显式转换,我们可以将一个数据类型转换为另一种数据类型,以满足程序的需求。
在进行数据类型转换时,需要注意一些细节问题。
首先,对于数值类型的转换,如果转换后的数据类型无法容纳原始数据类型的值,这种转换可能会导致数据丢失或溢出的问题。
另外,对于指针类型的转换,需要特别小心,因为指针类型转换可能会导致数据访问错误或未定义行为。
在进行指针类型的转换时,建议使用专门的指针类型转换操作符,如(void *)。
总的来说,数据类型转换是C语言中常见的操作,可以用于将不同数据类型的值在程序中进行有效处理。
在进行数据类型转换时,需要注意选择合适的转换方法,并且确保转换后的数据类型能够正确表示原始数据类型的值,以避免出现错误或异常情况。
通过合理使用数据类型转换,我们可以提高程序的可读性和性能,更好地实现所需的功能。
整型数据
整型数据2.3 整型数据2.3.1 整型常量整型常量可以用十进制、八进制和十六进制等形式表示。
八进制数,如010、011、016等。
十六进制数用数字0和字母X(或大写字母X)开头,如Ox10、OXde、Oxf等都是合法的十六进制数。
十六进制数中的字母a、b、e、d、e、f既可以用小写也可以用大写。
只有十进制数可以是负数,而八进制和十六进制数只能是正整数。
在VC 6.0中可以在长整型常量的后面加一个字母l(L的小写)或L,例如:l23L、3451、OL、123456L 等,这些常量在内存中占四个字节。
无符号整数在数的末尾应该加上字母后缀u或U,若是长整型无符号整型常量,则可以加后缀lu或LU。
2.3.2 整型变量整型变量可以分为基本型(int)、短整型(short int)、长整型(int或long int)、无符号型(unsigned)四种。
不同的编译系统为int变量开辟的内存单元大小不同。
VC6.0为int 变量开辟4个字节(32个二进制位)的内存单元,允许存放的数值范围是:-2147483648~2147483647。
整型的变量只能存放整型数值。
若不指定变量为无符号型,则变量隐含为有符号型(signed)。
短整型无符号常量的取值应在0~65535范围内,长整型无符号常量的取值在0~4294967295的范围内。
注意:无符号常量不能表示成小于0的负数,例如:-200U是不合法的。
2.3.3 整型数据的分类前面介绍的int类型通常称为基本整型。
除此之外,C语言中整型数据还有其他三种类型:短整型(short int)、长整型(int或long int)、无符号型(unsigned)。
若不指定变量为无符号型,则变量隐含为有符号型(signed)。
不同的编译系统或计算机系统对这几类整型数所占用的字节数有不同的规定。
下表显示了TurboC中各种类型的整数的类型说明符及表示数的范围。
2.3.4 整数在内存中的存储形式1、位、字节、字长计算机中,内存储器的最小存储单位称为“位(bit)”。
c语言中数组数据类型转化
c语言中数组数据类型转化在c语言中,数组是一种非常常见的数据类型。
数组是指一组有着相同数据类型的数据,而每个数据项又可以通过一个数组下标来访问。
但是有时我们需要将数组的数据类型转化为其他类型,比如将整型数组转化为字符型数组,这时候就需要用到数组数据类型转化。
下面分步骤介绍c语言中数组数据类型转化的方法:1. 定义需要转化的数组在进行数组数据类型转化之前,我们需要首先定义要转化的数组。
例如,我们定义一个整型数组a,其长度为5,如下所示:int a[5] = {1, 2, 3, 4, 5};2. 将数组的内存映射到另一个数据类型数组的内存是一段连续的内存空间,我们可以将其映射到另一个数据类型。
例如,将整型数组a的内存映射到字符型数组b中,代码如下:char b[5 * sizeof(int)];memcpy(b, a, 5 * sizeof(int));上面的代码使用了memcpy函数将整型数组a的内存复制到了字符型数组b中。
需要注意的是,字符型数组的长度应该为转化后的数组长度乘以原数组的元素类型所占字节数。
3. 转化数据类型上面的代码虽然已经将整型数组a的内存映射到了字符型数组b 中,但是我们需要对数据类型进行转化。
由于字符型数组和整型数组内存映射后每一段内存的长度是一样的,因此我们可以将字符型数组转化为整型数组。
代码如下:int *p = (int *) b;上面的代码将字符型数组b强制转化为了整型指针p。
此时,p 就指向了一个整型数组,这个数组的内容就是原来的整型数组a。
4. 使用转化后的数组经过上述的步骤,我们已经成功地将整型数组转化为了字符型数组,再转化回到整型数组,此时就可以使用转化后的整型数组。
代码如下:for (int i = 0; i < 5; i++) {printf("%d ", p[i]);}上面的代码打印出了转化后的整型数组元素的值。
总结:在c语言中,数组是一种非常常见的数据类型。
Unicode下CString与char_转换
Unicode下CString与char *转换在Visual C++.NET2005中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte Character Set),这样导致在VC6.0中非常简单实用的各类字符操作和函数在VS2005环境下运行时会报各种各样的错误,这里总结了在Visual C++.NET2005环境中Unicode字符集下CString和char *之间相互转换的几种方法,其实也就是Unicode字符集与MBCS字符集转换。
(1)、Unicode下CString转换为char *方法一:使用API:WideCharToMultiByte进行转换CString str = _T("D:\\校内项目\\QQ.bmp");//注意:以下n和len的值大小不同,n是按字符计算的,len是按字节计算的int n = str.GetLength(); // n = 14, len = 18//获取宽字节字符的大小,大小是按字节计算的int len = WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),NULL,0,NULL,NULL);//为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小char * pFileName = new char[len+1]; //以字节为单位//宽字节编码转换成多字节编码WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),pFileName,len,NULL,NULL);pFileName[len+1] = '\0'; //多字节字符以'\0'结束方法二:使用函数:T2A、W2ACString str = _T("D:\\校内项目\\QQ.bmp");//声明标识符USES_CONVERSION;//调用函数,T2A和W2A均支持ATL和MFC中的字符转换char * pFileName = T2A(str);//char * pFileName = W2A(str); //也可实现转换注意:有时候可能还需要添加引用#include <afxpriv.h>(2)、Unicode下char *转换为CString方法一:使用API:MultiByteToWideChar进行转换char * pFileName = "D:\\校内项目\\QQ.bmp";//计算char *数组大小,以字节为单位,一个汉字占两个字节int charLen = strlen(pFileName);//计算多字节字符的大小,按字符计算。
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语言整型数据分析,希望能给大家带来帮助!整型数据即整数。
整型数据的分类整型数据的一般分类如下:基本型:类型说明符为int,在内存中占2个字节。
短整型:类型说明符为short int或short。
所占字节和取值范围均与基本型相同。
长整型:类型说明符为long int或long,在内存中占4个字节。
无符号型:类型说明符为unsigned。
无符号型又可与上述三种类型匹配而构成:无符号基本型:类型说明符为unsigned int或unsigned。
无符号短整型:类型说明符为unsigned short。
无符号长整型:类型说明符为unsigned long。
下表列出了C语言中各类整型数据所分配的内存字节数及数的表示范围。
类型说明符数的范围字节数int -32768~32767,即 -215~(215-1) 2unsigned int 0~65535,即 0~(216-1) 2short int -32768~32767,即 -215~(215-1) 2unsigned short int 0~65535,即 0~(216-1) 2long int -2147483648~2147483647,即 -231~(231-1) 4unsigned long 0~4294967295,即0~(232-1) 4整型数据在内存中的存放形式如果定义了一个整型变量i:int i;i=10;数值是以补码表示的:正数的补码和原码相同;负数的补码:将该数的绝对值的二进制形式按位取反再加1。
例如:求-10的补码:由此可知,左面的第一位是表示符号的。
各种无符号整型数据所占的内存空间字节数与相应的`有符号类型量相同。
但由于省去了符号位,故不能表示负数。
以13为例:整型数据的表示方法上面讲到的整数,都是十进制。
VC中字符串与数字转换方法
VC中字符串和数字转换的函数(转)vc中字符串和数字转换的函数:atoi,atol,strtod,strtol,strtoul 类型转换atoi,atol,strtod,strtol,strtoul实现类型转换atof(将字符串转换成浮点型数)相关函数atoi,atol,strtod,strtol,strtoul表头文件#include <stdlib.h>定义函数double atof(const char *nptr);函数说明atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。
参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。
返回值返回转换后的浮点型数。
附加说明atof()与使用strtod(nptr,(char**)NULL)结果相同。
atoi(将字符串转换成整型数)相关函数atof,atol,atrtod,strtol,strtoul表头文件#include<stdlib.h>定义函数int atoi(const char *nptr);函数说明atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。
返回转换后的整型数。
附加说明atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。
atol(将字符串转换成长整型数)相关函数atof,atoi,strtod,strtol,strtoul表头文件#include<stdlib.h>定义函数long atol(const char *nptr);函数说明atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。
float数据类型中一些问题
问题一:(32位机)int和float型数据在内存中同为4字节,为什么float型数据比int型数据表示的范围大得多?(见tab1)类型 字节数 有效数字 数字范围Int 4 -32768~32767 即-2^15~(2^15-1)Long 4 -2147483648~2147483647即-2^31~(2^31-1)Float 4 7 -3.4×10^(-38)~3.4×10^(38)Double 8 16 -1.7×10^(-308)~1.7×10^(308)Tab1答案:(它们在内存中存放数据的方式不同)Int型数据在内存中是以精确值来存储的,每个数都与32bit中的各个bit 是一一对应的。
比如3就是0X0003。
Float型将4byte的内存划分为符号位,指数位,尾数位(fig1)。
尾数位决定了精度,指数位增大了广度。
比如1.123123*10^34,这个数中的1.123123就放在尾数位,阶数10^34就放在指数位。
这个数虽然表示范围大,但是有效位不高,也可以说精度不高,因为1123123?????,在3以后的数都无法精确表示。
也就是说float牺牲了精度,提升了广度。
Fig1C语言中浮点数(即实数)是以科学计数法(只有一位非零整数)来计数的(即规划化指数形式,例如1.2356E6)。
如图fig1所示,23位尾数就是表示十进制规范化尾数(1.2356),8位指数位(-128~127)来表示指数(E6),因此转换成十进制为2^(-128)-2^(127),因此高达10^38。
但是23位尾数(1.2356)限制了其精度,23位尾数转成十进制2^23=8388608,因此其有效位最高只有7位,多了就不是有效的了。
问题二:VC++6.0中关于float型变量的赋值、输出、类型转换。
Note:实型常量即使没有小数部分,也一定要带有小数点“.”,比如4.0或4.都是浮点型,但4是整型。
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++基础》授课教案3. 适度提问养成学生勤于思考的学习习惯。
4.比较与比喻,提高学生的学习兴趣。
5. 逐步深入讲解通过几个不同类型难度有所递进的例子,让学生体会C++语法特点。
教学过程:1.提问:知道目前流行的编程语言吗?简述主流的编程语言。
2.设问求1~100累加和如何完成?演示程序实现。
并通过改写程序,通过输入n实现1到任意数n的累加和,让学生理解程序的通用性。
3.依次简要讲解C++的发展历史、地位、特点,引出面向对象和面向过程编程,让学生有所了解。
4.讲解几个小例子,难度有所递增,让学生了解C++语言的特点、构成和书写形式,体会语法。
5.演示讲解课程实验开发平台VC6.01)结合下图,讲解程序编写、编译、链接、执行的过程、各阶段作用和生成的文件;2)用VC6.0演示编写、编译、链接、执行的过程和在相应目录下产生的东西;以及定位错误、程序的方法;3)让某位同学给全班演示,实际操作,老师在旁边指导,说明容易犯的错误。
小结:1.程序语言有机器语言、汇编语言、高级语言之分。
C++是高级语言。
2.有面向过程和面向对象两种程序设计方法;C++是面向对象语言,但既可以面向过程编程,也可以实现面向对象编程。
3.C++程序实现经过编写、编译、链接、执行的过程;作业:1)输出“I love c++”2)输入a,b,求a-b的值3)模仿例1-12,求两数中的最小数《C++基础》授课教案重点、难点及学生易犯错误的地方:一、重点内容1.C++的基本数据类型及其使用方法;2.标识符的命名规则3.变量的定义和使用二、难点内容1.符合常量、常变量2.转义字符的特点三、学生易犯错误的地方1. 特殊字符、转义字符的使用2.注释的使用教学策略和方法:1.本将语法点较多,所以在教学中结合多个小程序,在练习中掌握各个知识点2.通过实例操作,体会语法点,由教师和学生共同总结教学过程:6.讲解C++语言字符集与词汇,重点是标识符命名规则。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C/C++与MFC数据类型转换一.string,CString,int,char*之间的相互转换1. //-------- int ---> CString--------------///* int a = 3;CString str;str.Format("%d",a);MessageBox(str);*/2. //---------string ---> CString-----------///* string str = "abcd";CString cstr;//错误的写法//cstr.Format("%s",str); //运行出错cstr.Format("%s",str.c_str());MessageBox(cstr);*/3. //----------char * ---> CString-------------///* char *ch;ch = "abcdef" ;CString str ;//有两种方法//str.Format("%s",ch);//str =ch;MessageBox(str);*/4. //-----------CString ---> char * ------------///* CString cstr = "abcdefg" ;char *ch = cstr.GetBuffer(cstr.GetLength());char *ch = (char *)LPCTSTR(cstr);MessageBox(ch);/*5. //----------CString --->char[100]------------///*char ch[100];CString cstr = "abcde";//strncpy(ch,cstr,sizeof(ch));strncpy(ch,(LPCTSTR)cstr,sizeof(ch));MessageBox(ch);*/6. //-----------CString ---> int -------------///* CString str="123";CString str1 = "123.333";int temp = atoi((LPCTSTR)str1);CString show ;show.Format("%d",temp);MessageBox(show);*//* CString str = "123";UINT n ;sscanf(str,"%d",n);CString show ;show.Format("%d",n);MessageBox(show);*/7. //-------------char * ---> int | long | float | double----------------///* char *ch = "123" ;int n = atoi(ch);CString show ;show.Format("%d",n);MessageBox(show);*//* char *ch = "123" ;long lon = atol(ch);CString show ;show.Format("%d",lon);MessageBox(show);*///除了以上的方法//还有如下://long long atoll(const char *nptr);//long long atoq(const char *nptr);/* char *ch = "12.3" ;float f ;f = atof(ch);CString show ;show.Format("%f",f);MessageBox(show);*//* char *ch = "12.3" ;double d ;d = strtod(ch,NULL);CString show ;show.Format("%lf",d);MessageBox(show);*/7. //--------------CString ---> string---------------///* CString cstr = "abcde" ;string str(cstr.GetBuffer(100));cstr.ReleaseBuffer(); //一定要释放资源CString show ;show.Format("%s",str.c_str());MessageBox(show);*/8. //--------------char * ---> string -------------///* char *ch="abcd";string str(ch);CString show ;show.Format("%s",str.c_str());MessageBox(show);//你的只能初始化,在不是初始化的地方最好还是用assign().*/9. //--------------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);*//* int a = 10;char *ch = new char[10];itoa(a,ch,10);MessageBox(ch);*/10. //----------------string ---> char *--------------------///* char *ch = new char[100];memset(ch,0,100);string str("abcd");//ch = str.c_str(); //'=' : cannot convert from 'const char *' to 'char *' string 只能转化成 const char *strcpy(ch,str.c_str());MessageBox(ch);*/二、其它数据类型转换为字符串短整型(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);字符串指针(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 与COleVariant对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,例如:VARIANT va;int a=2001;va.vt=VT_I4; //指明整型数据va.lVal=a; //赋值对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY_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位。