⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 --有关数据类型转换的整理.htm

📁 有关VC开发过程中常被人忘记的
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                  <P><BR>对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如:<BR>WORD 
                  wValue;<BR>BYTE loValue = LOBYTE(wValue);///取低8位<BR>BYTE 
                  hiValue = HIBYTE(wValue);///取高8位</P>
                  <P><BR>两个16位数据(WORD)合成32位数据(DWORD,LRESULT,LPARAM,或WPARAM)<BR>LONG 
                  MAKELONG( WORD wLow, WORD wHigh );<BR>WPARAM MAKEWPARAM( WORD 
                  wLow, WORD wHigh ); <BR>LPARAM MAKELPARAM( WORD wLow, WORD 
                  wHigh );<BR>LRESULT MAKELRESULT( WORD wLow, WORD wHigh ); </P>
                  <P><BR>两个8位的数据(BYTE)合成16位的数据(WORD)<BR>WORD MAKEWORD( BYTE 
                  bLow, BYTE bHigh ); </P>
                  <P><BR>从R(red),G(green),B(blue)三色得到COLORREF类型的颜色值<BR>COLORREF 
                  RGB( BYTE byRed,BYTE byGreen,BYTE byBlue );<BR>例如COLORREF 
                  bkcolor = RGB(0x22,0x98,0x34);</P>
                  <P><BR>从COLORREF类型的颜色值得到RGB三个颜色值<BR>BYTE Red = 
                  GetRValue(bkcolor); ///得到红颜色<BR>BYTE Green = 
                  GetGValue(bkcolor); ///得到绿颜色<BR>BYTE Blue = 
                  GetBValue(bkcolor); ///得到兰颜色</P>
                  <P>九、注意事项<BR>假如需要使用到ConvertBSTRToString此类函数,需要加上头文件comutil.h,并在setting中加入comsupp.lib或者直接加上#pragma 
                  comment( lib, "comsupp.lib" )</P>
                  <P>后记:本文匆匆写成,错误之处在所难免,欢迎指正.</P>
                  <P><BR>关于把BSTR类型数据转换成CString 
                  类型数据时的问题?<BR>当我在把BSTR类型数据转换成CString 或 “char* 
                  类型”数据时,发现在BSTR类型字符串较短的情况下没问题,当较长时就会出现<BR>内存读写错了。(在NT,2000下都测试是这样的。)<BR>根据你所说:<BR>1)字符串指针(char 
                  *)等已经被CString构造函数支持的数据类型 可以直接赋值 str = username;<BR>2)当b 
                  为BSTR类型时可以使用<BR>char 
                  *p=_com_util::ConvertBSTRToString(b);<BR>于是以下是对的:<BR>CString 
                  cstr;<BR>BSTR 
                  bstr;<BR>....<BR>cstr=com_util::ConvertBSTRToString(bstr);<BR>...<BR>可是当bstr非常大时(其实,较大时就会)就会出现内存读写错,不知何故。<BR>此外我发现cstr=com_util::ConvertBSTRToString(bstr);<BR>可以简化为 
                  cstr=bstr; 但当bstr较大时同样出现这个问题。<BR>请兄弟帮忙!急。谢谢!</P>
                  <P>如何转化((list*)fileip.bian)-&gt;liang</P>
                  <P>关于把CString转化成LPCTSTR的问题 作者:jakiesun 发表日期:2001-9-5 
                  20:08:48<BR>我记的我以前写过这样一段代码<BR>void function()<BR>{<BR>CString 
                  str,str1,str2;<BR>function((char*)(LPCTSTR)str1);<BR>str=str1;<BR>...//调试道此发现str2的值随着str的改变而改变,请问能解释一下为什么,如有回答,请通知<BR><A 
                  href="mailto:wangshaohong@sohu.com,tx">wangshaohong@sohu.com,tx</A>先</P>
                  <P>}</P>
                  <P>添加lib支持 作者:磨刀霍霍 发表日期:2001-9-10 
                  11:32:12<BR>如果不添加会产生错误,在setting中加入comsupp.lib或者直接#pragma 
                  comment( lib, "comsupp.lib" )<BR>微软认为缺省的设置call 
                  convention如果不设置成__cdecl也会出现同样的错误。</P>
                  <P><BR>1。int 转成cstring ??</P>
                  <P>回复人: caigzhi(caigzhi) (2001-10-17 11:27:35) 得0分 <BR>CString 
                  的成员函数Format()</P>
                  <P>int a = 2131;<BR>CString str;<BR>str.Format("%d",a);</P>
                  <P>回复人: tenchi(C与C++之间) (2001-10-17 11:32:12) 得0分 <BR>int 
                  i=2001;<BR>char str[10];<BR>_itoa(i,str,10);<BR>CString 
                  szString=str; <BR>回复人: fiolin(幽深的水) (2001-10-17 11:45:40) 得0分 
                  <BR>他们两个的都可以!! </P>
                  <P>回复人: sohucsdnvc(thanks) (2001-10-17 13:24:17) 得0分 
                  <BR>那如何把double转成cstring <BR>回复人: yihugang(小虎子) (2001-10-17 
                  13:29:15) 得6分 <BR>int i = 2131;<BR>char *c=new 
                  char[20];<BR>CString str;<BR>sprintf(c,'%d',i);<BR>str=*c;</P>
                  <P><BR>回复人: Gu_c_h(Gu) (2001-10-17 14:07:17) 得0分 <BR>用 _gcvt 
                  下面是 msdn 的例子</P>
                  <P>Example</P>
                  <P>/* _GCVT.C: This program converts -3.1415e5<BR>* to its 
                  string representation.<BR>*/</P>
                  <P>#include &lt;stdlib.h&gt;<BR>#include &lt;stdio.h&gt;</P>
                  <P>void main( void )<BR>{<BR>char buffer[50];<BR>double source 
                  = -3.1415e5;<BR>_gcvt( source, 7, buffer );<BR>printf( 
                  "source: %f buffer: '%s'\n", source, buffer );<BR>_gcvt( 
                  source, 7, buffer );<BR>printf( "source: %e buffer: '%s'\n", 
                  source, buffer );<BR>}</P>
                  <P><BR>Output</P>
                  <P>source: -314150.000000 buffer: '-314150.'<BR>source: 
                  -3.141500e+005 buffer: '-314150.'</P>
                  <P>回复人: Gu_c_h(Gu) (2001-10-17 14:49:56) 得6分 <BR>int a = 
                  -3.1415e5;<BR>CString str;<BR>str.Format("%f",a); 
                  <BR>回复人: ruixp(锐剑) (2001-10-17 15:06:48) 得6分 <BR>CString 
                  的成员函数Format()<BR>int a = 2131;<BR>CString 
                  str;<BR>str.Format("%d",a);</P>
                  <P>2。基类对象怎么能转换成派生类对象?<BR>int 
                  CDaoListView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
                  <BR>{<BR>lpCreateStruct-&gt;style |= LVS_REPORT 
                  |LVS_EDITLABELS;<BR>if (CListView::OnCreate(lpCreateStruct) == 
                  -1)<BR>return -1;</P>
                  <P>//////////// 创建ImageList;<BR>CDaoViewApp * pApp = 
                  (CDaoViewApp *) AfxGetApp();</P>
                  <P>m_pImageList = new CImageList();<BR>ASSERT(m_pImageList 
                  !=NULL);<BR>m_pImageList-&gt;Create(16,16,TRUE,4,4);<BR>m_pImageList-&gt;Add(pApp-&gt;LoadIcon(IDI_KEY));<BR>m_pImageList-&gt;Add(pApp-&gt;LoadIcon(IDI_ICON4));<BR>m_pImageList-&gt;Add(pApp-&gt;LoadIcon(IDI_ICON5));</P>
                  <P>CListCtrlEx&amp; ctlList = (CListCtrlEx&amp;) 
                  GetListCtrl();//我不懂的就这句,cListCtrlEx看下面的声明。<BR>ctlList.SetImageList 
                  (m_pImageList, LVSIL_SMALL) ;<BR>////////////<BR>return 
                  0;<BR>}</P>
                  <P>class CListCtrlEx : public 
                  CListCtrl//类cListCtrlEx定义。<BR>{.....<BR>}<BR>class 
                  CDaoListView : public 
                  CListView//cDaoListView定义!<BR>{<BR>...<BR>}<BR>注:我的问题是GetListCtrl()返回的是一个cListCtrl对象的引用,怎么能把它转换成一个它的派生类对象的引用?c++的类型转换怎么支持? 
                  </P>
                  <P><BR>回复贴子: <BR>回复人: lhj(努力加油) (2002-1-29 18:56:06) 得0分 
                  <BR>CListCtrlEx&amp; ctlList = (CListCtrlEx&amp;) 
                  GetListCtrl();<BR>这是强制类型转换,&amp;表示是一个引用,lctList的值在这次赋值后不能被修改。</P>
                  <P>回复人: wwwsq(wwwsq) (2002-1-29 19:09:22) 得0分 
                  <BR>建议你找本C++方面的书看看,VC虽然号称可视,实际上C++基础还是很重要的。</P>
                  <P><BR>回复人: xcopy(xcopy) (2002-1-29 19:26:16) 得0分 
                  <BR>用dynamic_cast()可以安全的转换。 </P>
                  <P>3。如何在CString和double之间转换?要求转换之后能保留小数点,保留正负号??</P>
                  <P>cstring::format(%.xe) x为精度位 </P>
                  <P>回复人: pchaos(杂讲) (2002-1-28 11:21:46) 得0分 <BR>CString 
                  str;<BR>double db;<BR>str = "123.456";<BR>db = 
                  atof((LPCTSTR)str); <BR>回复人: hgw111(hg) (2002-1-28 11:52:57) 
                  得0分 <BR>CString -&gt; double : atof<BR>double -&gt;CString 
                  :Format <BR>回复人: pchaos(杂讲) (2002-1-28 13:46:04) 得0分 
                  <BR>CString str;<BR>double db;<BR>str = "123.456";<BR>db = 
                  atof((LPCTSTR)str); <BR>db = 777.999;<BR>str.format("%e", db); 
                  </P>
                  <P>4。字符型要转换成int??<BR>atoi(str) </P>
                  <P>5。_bstr_t 到 unsigned int??<BR>_bstr_t str;<BR>unsigned int 
                  Length=6;<BR>Length=Length-str.length(); </P>
                  <P>6。VARIANT类型转换问题?<BR>我在使用MSCOMM中SetOutput()函数时<BR>形参必须为VARIANT变量<BR>如何将其它的数据类型转换为VARIANT类型?<BR>如:Cstring-&gt;VARIANT、 
                  *char-&gt;VARIANT<BR>我对VARIANT的类型结构体不太熟,请讲详细些(最好有范例),谢谢!</P>
                  <P>回复贴子: <BR>回复人: vc_xiaoxin(小新) (2001-12-26 15:43:57) 得0分 
                  <BR>VARIANT本身是一个复杂的结构,别的数据怎么转呀?关注 
                  <BR>回复人: mpg_liu(星仁) (2001-12-27 18:33:50) 得10分 
                  <BR>定义一个VARIANT变量后,他应该是一个结构体变量,其中有一个成员是字符型的,给这个成员赋值 
                  <BR>回复人: LLnju(LLnju) (2001-12-27 18:36:10) 得0分 <BR>实在不清楚嘛就用 
                  _variant_t , COleVariant 这些东东嘛,很好用的啊 
                  <BR>回复人: softarts(CDMA2000) (2001-12-27 18:41:32) 得10分 
                  <BR>构造一个就行了。<BR>VARIANT varXX;<BR>CString 
                  strYY;<BR>varXX.vt=VT_BSTR;<BR>varXX.bstrVal = 
                  strYY.allocsysstring();<BR>应该可以了。<BR>回复人: softarts(CDMA2000) (2001-12-27 
                  18:42:11) 得0分 <BR>我也觉得COleVariant要好用一些,呵呵,我都用它。 
                  <BR>回复人: bobofu(有问题要问) (2001-12-27 19:32:18) 得10分 <BR>CString 
                  str;<BR>_variant_t var;<BR>var = _variant_t(str); </P>
                  <P>7。COleVarant 如何转换为 CString?<BR>CString 如何转换为 char 
                  *<BR>CString 如何转换为 char[xx] ??</P>
                  <P>CString 如何转换为 char * wsprintf或者=<BR>CString 如何转换为 char[xx] 
                  strcpy() <BR>回复人: SecretGarden(天堂鸟) (2002-1-14 11:55:23) 得0分 
                  <BR>COleVarant封装了VAREANT类型。<BR>VAREANT类型其实是个巨大地Union,里面自然有你<BR>想要地unsigned 
                  char *类型。<BR>CString地GetBuffer和Format可以实现你的后两个问题</P>
                  <P><BR>8。v_variant_t类型转换成cstring<BR>总提示我cstring未定义<BR>程序如下<BR>_variant_t 
                  vfirstname;//存储的是数据库中的数据<BR>CString 
                  str;//提示出错<BR>vfirstname=pRs-&gt;GetCollect 
                  (_variant_t("Phone_Num"));<BR>vfirstname.ChangeType 
                  (VT_BSTR);<BR>str=vfirstname.bstrVal;//提示出错 </P>
                  <P><BR>回复贴子: <BR>回复人: hydnoahark(诺亚方舟) (2001-11-12 11:56:51) 
                  得10分 <BR>&gt;&gt;CString str;//提示出错<BR>要求include 
                  &lt;afx.h&gt;并且设置Use run-time Library为Multithreaded 
                  <BR>回复人: zhengyun_ustc(^-^) (2001-11-12 12:04:39) 得15分 
                  <BR>CString未定义,说明你的工程没有引用MFC!!</P>
                  <P>要想使你的工程支持MFC,请按照以下步骤作:<BR>1:在你的stdafx.h的头文件中加入:<BR>#include 
                  "afxtempl.h"<BR>这是一个囊括了MFC的集合定义的头文件,有了它,你的工程就识别Cstring类了。</P>
                  <P>2:在你的工程设置中,在General页中,选择“MFC”为“Using MFC in a shared 
                  DLL”</P>
                  <P>OK,现在再编译你的工程即可。 <BR>回复人: zhengyun_ustc(^-^) (2001-11-12 
                  12:06:56) 得5分 
                  <BR>_variant_t的bstrVal成员是BSTR类型。<BR>它是一个指向一个OLECHART*的指针。 
                  <BR>回复人: vickowang(小苍) (2001-11-12 12:48:21) 得5分 <BR>(char 
                  *)_bstr_t(vfirstname) 
                  <BR>回复人: smallfool(smallfool) (2001-11-12 13:52:54) 得4分 
                  <BR>或许你还需要一个从UNICODE字符到ANSI字符的转变函数 
                  <BR>回复人: sun_1112(萧) (2001-11-12 17:34:44) 得0分 
                  <BR>谢谢大家<BR>给我这么大的支持!:) 
                  <BR>回复人: zhengyun_ustc(^-^) (2001-11-14 13:24:07) 得0分 
                  <BR>用vickowang(小苍)的意见可能会有问题,转换出的字符串应该是乱码。</P>
                  <P>因为(char *)转换需要一个const的字符串资源,才能强制转换。<BR>所以应该:<BR>_bstr_t 
                  bstrTemp = _bstr_t(vfirstname.bstrVal);<BR>TCHAR 
                  szTemp[MAX_PATH];<BR>szTemp = (char*)bstrTemp;</P>
                  <P>9。char * 转换为TCHAR类型??<BR>直接转换,TCHAR相当于char了<BR>char * 
                  s;<BR>TCHAR * s1=(TCHAR *)s; <BR>回复人: dysxq() (2001-12-21 
                  21:26:25) 得0分 <BR>要看你的程序设置是ANSI还是UNICODE, 
                  如果是ANSI,直接转,如果是UNICODE,TCHAR相当于WCHAR, 要用mbstowcsz转一下 
                  <BR>回复人: xiaoxiaohan(萧晓寒) (2001-12-21 23:52:17) 得0分 
                  <BR>Unicode :宽字节字符集<BR>1. 
                  如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?<BR>可以调用Microsoft Visual 
                  C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。<BR>调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。<BR>2. 
                  如何对DBCS(双字节字符集)字符串进行操作?<BR>函数 描述<BR>PTSTR CharNext ( LPCTSTR 
                  ); 返回字符串中下一个字符的地址<BR>PTSTR CharPrev ( LPCTSTR, LPCTSTR ); 
                  返回字符串中上一个字符的地址<BR>BOOL IsDBCSLeadByte( BYTE ); 
                  如果该字节是DBCS字符的第一个字节,则返回非0值<BR>3. 为什么要使用Unicode?<BR>(1) 
                  可以很容易地在不同语言之间进行数据交换。<BR>(2) 
                  使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。<BR>(3) 提高应用程序的运行效率。<BR>Windows 
                  2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那么系统首先要将字符串转换成<BR>Unicode,然后将Unicode字符串传递给操作系统。如果希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字符串,然后将结<BR>果返回给你的应用程序。进行这些字符串的转换需要占用系统的时间和内存。通过从头开始用Unicode来开发应用程序,就能够使你的应用程序<BR>更加有效地运行。<BR>Windows 
                  CE 本身就是使用Unicode的一种操作系统,完全不支持ANSI Windows函数<BR>Windows 98 
                  只支持ANSI,只能为ANSI开发应用程序。<BR>Microsoft公司将COM从16位Windows转换成Win32时,公司决定需要字符串

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -