在VC6.0下面数据类型装换
- 格式:docx
- 大小:20.30 KB
- 文档页数:6
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各种数据类型之间相互转化⑴. 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语言的基本数据类型包括整型(int)、浮点型(float)、字符型(char)和布尔型(bool)等。
这些数据类型的特点和所能表示的范围是不同的,因此在进行数据类型转换时需要注意。
### 派生数据类型C语言的派生数据类型是通过基本数据类型进行扩展得到的数据类型,包括数组、指针和结构体等。
这些数据类型的转换规则同样需要遵守C语言的规范,并考虑到其特殊的性质。
## 数据类型转换规则1. **隐式类型转换**在C语言中,有一些情况下编译器会自动进行数据类型转换,而不需要我们显式地进行转换操作。
这种转换被称为隐式类型转换,常见的情况包括:- 整型和浮点型的混合运算:当一个整型操作数和一个浮点型操作数进行运算时,整型操作数会被自动转换为浮点型,然后进行运算。
- 字符和整型的相互转换:字符型在内存中的存储实际上是对应的ASCII码值,因此字符型可以看作是整型。
在一些情况下,字符型可以隐式地转换为整型来进行运算。
2. **显式类型转换**在一些特定的情况下,我们需要显式地指定数据类型进行转换,这就是显式类型转换。
在C语言中,可以使用类型转换符进行显式类型转换,常用的类型转换符有:- `(int)`:将其他类型转换为整型。
- `(float)`:将其他类型转换为浮点型。
- `(char)`:将其他类型转换为字符型。
在进行显式类型转换时,需要注意一些细节问题。
例如,转换会造成数据精度改变或信息损失等情况,在使用时需要谨慎考虑。
## 注意事项在进行数据类型转换时,有一些注意事项需要考虑,以确保程序的正确性和可读性。
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.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语言中,整型数据间的转换可以分为两种情况:从较小的整型向较大的整型转换以及从较大的整型向较小的整型转换。
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)中的类型转换总结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语言还支持显式转换,也称为强制类型转换。
显式转换需要程序员手动指定转换的类型,使用强制类型转换运算符进行操作。
强制类型转换的语法格式为:(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语言中数组数据类型转化的方法: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语言中,数组是一种非常常见的数据类型。
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位。